首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 字符串截取。100%结贴,该怎么解决

2013-12-11 
SQL 字符串截取。。###################100%结贴表A中一个段B_Sidata 存的数据如下:666888|4990.20|73071.00

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
*/

[解决办法]
引用:
表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 中第一个“
[解决办法]
”到第二个中间的


直接截取就是了,楼上的是语法。但是你说数据量大,这样的查询是无法走索引的,如果非要这么实现,那也没得办法。最好通过程序来截取

热点排行