在SQl中拆分没有分隔符的字符串

时间:2013-10-02 12:17:14

标签: tsql

我有SELECT语句的结果集,如何在没有任何分隔符的情况下拆分一列 这是我的结果

Size TCount TDevice
 2     5      E01
 4.5   3      W02E01

我想要这个

Size TCount  TDevice
 2      5     E
 2      5     0
 2      5     1
4.5     3     W
4.5     6     0      (we have 2 times of 0)
4.5     3     2
4.5     3     1    

谢谢

2 个答案:

答案 0 :(得分:2)

您可以加入辅助号码表。我使用spt_values进行演示,但你应该create a permanent one

WITH Nums
     AS (SELECT number
         FROM   master..spt_values
         WHERE  type = 'P'
                AND number BETWEEN 1 AND 1000),
     Result(Size, TCount, TDevice)
     AS (SELECT 2,  5,'E01'
         UNION ALL
         SELECT 4.5,3,'W02E01')
SELECT Size,
       COUNT(*) * TCount             AS TCount,
       SUBSTRING(TDevice, number, 1) AS TDevice
FROM   Result
       JOIN Nums
         ON Nums.number <= LEN(TDevice)
GROUP  BY Size,
          TCount,
          SUBSTRING(TDevice, number, 1) 

答案 1 :(得分:1)

;with cte as
(
 select Size,TCount,
         substring(TDevice, 1, 1) as Chars,
         stuff(TDevice, 1, 1, '') as TDevice
  from t1
  union all
  select Size,TCount,
         substring(TDevice, 1, 1) as Chars,
         stuff(TDevice, 1, 1, '') as TDevice
  from cte
  where len(TDevice) > 0
)
select distinct Size,sum(TCount),Chars
from cte
group by Size,Chars

<强> SQL Fiddle

优势:不需要创建任何 User defined function (UDF)