日期:2014-05-17  浏览次数:20406 次

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
这样的数据要如何统计?想了很久没有思路