SQL 字符串截取。。###################100%结贴
表A中一个段B_Sidata 存的数据如下:
666888|4990.20|73071.00|242
666002|6290.00|73071.05|243
666822|826.29|25074|242
666006|4568.20|73071.00|291
666555|25936.20|73071.00|253
666776|90.20|2223.50|211
数据量比较大,现在想取出
4990.20
6290.00
826.29
4568.20
...
...
也就是查询出B_Sidata 中第一个“|”到第二个中间的
[解决办法]
WITH a (B_Sidata) AS
(
SELECT '666888
[解决办法]
4990.20
[解决办法]
73071.00
[解决办法]
242' UNION ALL
SELECT '666002
[解决办法]
6290.00
[解决办法]
73071.05
[解决办法]
243'
)
SELECT SUBSTRING(B_Sidata,CHARINDEX('
[解决办法]
',B_Sidata,1)+1,CHARINDEX('
[解决办法]
',B_Sidata,CHARINDEX('
[解决办法]
',B_Sidata,1)+1)-CHARINDEX('
[解决办法]
',B_Sidata,1)-1)
FROM a
;with A(B_Sidata)
as
(
select '666888
[解决办法]
4990.20
[解决办法]
73071.00
[解决办法]
242' union all
select '666002
[解决办法]
6290.00
[解决办法]
73071.05
[解决办法]
243' union all
select '666822
[解决办法]
826.29
[解决办法]
25074
[解决办法]
242' union all
select '666006
[解决办法]
4568.20
[解决办法]
73071.00
[解决办法]
291' union all
select '666555
[解决办法]
25936.20
[解决办法]
73071.00
[解决办法]
253' union all
select '666776
[解决办法]
90.20
[解决办法]
2223.50
[解决办法]
211'
)
select left(temp,charindex('
[解决办法]
',temp)-1) as B_Sidata
from
(
select stuff(B_Sidata,1,charindex('
[解决办法]
',B_Sidata),'') temp
from a
)t
/*
B_Sidata
4990.20
6290.00
826.29
4568.20
25936.20
90.20
*/