精彩SQL master..spt_values表妙用

 select number,* from master..spt_values with(nolock) where type='P'


 --取第四个逗号前字符串
 declare @str varchar(100) 
set @str='10,102,10254,103265,541,2154,41,156'
;with cte as( 
select left(@str,number-1) as ss,row_number()over(order by getdate()) as xh 
from master..spt_values with(nolock)  
where number>=1 and number<=len(@str+',') and type='P' 
and substring(@str+',',number,1)=','
)
select ss,* from cte where xh=4 

--3.找出两句话中相同的汉字 
declare @Lctext1 varchar(100) 
declare @Lctext2 varchar(100) 
set @Lctext1='我们都是来自五湖四海的朋友'
set @Lctext2='朋友多了路真的好走吗'
select substring(@Lctext2,number,1) as value 
from master..spt_values with(nolock) 
where type='P' and number>=1 and number<=len(@Lctext2) 
and charindex(substring(@Lctext2,number,1),@Lctext1,number)>1 


--4.提取两个日期之间的所有月份 
if object_id('tb') is not null drop table tb 
go 
create table tb(id int identity(1,1),startDate varchar(10),endDate varchar(10)) 
insert into tb(startDate,endDate) select '2017-01-01','2017-09-25'
go 
declare @startDate varchar(10) 
declare @endDate varchar(10) 
select @startDate=startDate,@endDate=endDate from tb with(nolock) 
select convert(varchar(7),dateadd(mm,number,@startDate),120) as [月份] 
from master..spt_values with(nolock) 
where type='P' and number>=0 
and dateadd(mm,number,@startDate)<=@endDate 
go 
drop table tb 
go 

--6.根据给定时间为基准以2小时为划分,得出一天划分出的时间段 
declare @time varchar(5) 
set @time='11:13'
select ltrim(a.number)+right(@time,3)+'-'+ltrim(b.number)+right(@time,3) as [划分结果] 
from master..spt_values a with(nolock),master..spt_values b with(nolock) 
where a.type='P' and b.type='P'
and a.number>=left(@time,2) and b.number<=24 
and a.number+2=b.number 

--7.将字符串显示为行列 
if object_id('tb') is not null drop table tb 
create table tb(id int identity(1,1),s nvarchar(100)) 
insert into tb(s) select '车位地址1,车位状况1|车位地址2,车位状况2|车位地址n,车位状况n'
;with cte as( 
select substring(s,number,charindex('|',s+'|',number)-number) as ss 
from tb with(nolock),master..spt_values with(nolock) 
where type='P' and number>=1 and number<=len(s) 
and substring('|'+s,number,1)='|'
)select left(ss,charindex(',',ss)-1)as s1,substring(ss,charindex(',',ss)+1,len(ss))as s2 from cte 
drop table tb 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值