日期:2014-05-17 浏览次数:20404 次
/**
最近在CSDN上见到很多关于master..spt_values的应用,感觉这个东西太好用了,
所以搜索了很多关于这方面的应用。
在此贴上自己的总结结果,希望各路大神批评指教,也希望大家继续把这方面的应用贴上。
*/
select number from master..spt_values with(nolock) where type='P'
/**解释:master..spt_values表的字段值为P的对应number字段值是从0-2047*/
-----------
--1.将字符串转换为列显示
if object_id('tb') is not null drop table tb
go
create table tb([编号] varchar(3),[产品] varchar(2),[数量] int,[单价] int,[金额] int,[序列号] varchar(8))
insert into tb([编号],[产品],[数量],[单价],[金额],[序列号])
select '001','AA',3,5,15,'12,13,14' union all
select '002','BB',8,9,13,'22,23,24'
go
select [编号],[产品],[数量],[单价],[金额]
,substring([序列号],b.number,charindex(',',[序列号]+',',b.number)-b.number) as [序列号]
from tb a with(nolock),master..spt_values b with(nolock)
where b.number>=1 and b.number<len(a.[序列号]) and b.type='P'
and substring(','+[序列号],number,1)=','
go
drop table tb
go
/**
编号 产品 数量 单价 金额 序列号
---- ---- ----------- ----------- ----------- --------
001 AA 3 5 15 12
001 AA 3 5 15 13
001 AA 3 5 15 14
002 BB 8 9 13 22
002 BB 8 9 13 23
002 BB 8 9 13 24
*/
----------
--2.第四个逗号之前的字符串
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
/**
ss
-------------------
10,102,10254,103265
*/
----------
--3.找出两句话中相同的汉字
declare @Lctext1 varchar(100)
declare @Lctext2 varchar(100)
set @Lctext1='我们都是来自五湖四海的朋友'
set @Lctext2='朋友多了路真的好走吗'
select substring(@Lctext2,number,1) as value
from master..spt