日度归档:2019年9月19日

MSSQL sqlserver 统计”一个字符串”在”另一个字符串”中出现的次数的方法


摘要:
下文讲述sqlserver中最快获取一个字符串在另一个字符串中出现个数的方法分享
实验环境:sql server 2008 R2



实现思路:
1.使用replace替换字符串后
2.使用Len获取替换后的长度,
3.得出替换前和替换后的长度差
4.使用长度差除以替换字符串的长度,所得到的商即为”替换的个数”。

declare @a varchar(10)
declare @b varchar(100)

--待替换字符串
set @a ='maomao' 

--原字符串赋值
set @b ='sqlserver,maomao365.com,maomao,other,maomao'
set @b = @b +'maomao,mama,sqlserver';

---中间变量定义
declare @b_ varchar(100)
declare @b_len int 
---替换字符串
set @b_ = REPLACE(@b,@a,'')

---替换后长度获取
set @b_len =len(@b_)

if len(@a) =0
begin
  print N'出现个数为0'
end
else
begin
   print N'出现个数为0'
   print  (len(@b)-@b_len) / len(@a)
end

相关阅读:
sqlserver replace函数用法分享
sqlserver len和datalength关键字用法简介
sqlserver算术运算方法分享

mssql sqlserver sql脚本检索数据,将查询结果作为”临时表使用”的两种方法分享


摘要:
下文讲述sqlserver中,将查询结果作为临时表使用的两种方法分享
实验环境:sqlserver 2008 R2


下文通过举例的方式讲述,“不创建临时表”,直接将查询结果作为临时表使用的两种方法分享,如下所示:

实现思路:
方法1:使用cte表达式,实现数据缓存处理
方法2:使用 as 关键字直接对查询结果进行别名处理

  create table [maomao365.com]
(keyId int identity,
 info varchar(30))
 go
 insert into [maomao365.com]
 (info)values
 ('sqlserver'),
 ('maomao365.com'),
 ('猫猫小屋'),
 ('MSSQL')
 go

 ---方法1:cte 表达式
 with cte_temp as 
   (
     select a.keyId,a.info  from [maomao365.com] a  
	  where a.keyId <=2 
    )
     select * from cte_temp;
	 go

 ---方法2: as 表达式
 select * from 
   (
     select a.keyId,a.info  from [maomao365.com] a  
	 where a.keyId <=2
   ) as t 
  go

 go
 truncate table [maomao365.com]
 drop     table [maomao365.com]

相关阅读:
cte表达式用法举例
子查询作为数据源的方法分享

mssql sqlserver 使用sql脚本连接字符串的方法分享


摘要:
下文讲述sqlserver中使用sql脚本连接字符串的方法分享,如下所示:
实验环境:sqlserver 2008 R2


今天收到同事的需求,将数据表中的数据 按指定条件进行字符串连接起来的方法分享,下面我们将采用
stuff系统函数和xml完成此操作,具体操作方法如下所示:

 
   create table [maomao365.com]
(keyId int,
 info varchar(30))
 go
 insert into [maomao365.com]
 (keyId,info)values
 (1,'sqlserver'),
 (1,'maomao365.com'),
 (2,'猫猫小屋'),
 (2,'MSSQL'),
 (3,'sql爱好者'),
 (3,'字符串聚合'),
 (3,'字符串连接')
 go

 SELECT b.keyId , 
         text= stuff((
                 SELECT  ' '+ a.info
                   FROM [maomao365.com]  a
                  WHERE a.keyId  = b.keyId 
                    FOR xml path('')) , 1 , 1
					, '') 
    FROM [maomao365.com]   b
  --- WHERE  b.keyId =1 
GROUP By b.keyId;


 go
 truncate table [maomao365.com]
 drop     table [maomao365.com]

相关阅读:
字符串函数 stuff 功能简介
sqlserver for xml