2011-03-09 65 views
0

我會想返回表的行包括在MS SQL 2008的字符串的所有可能的組合,例如字符串「01-02-03-04」的:SQL服務器字符串組合

  1. 01 - 02 - 03 - 04
  2. 02 - 03 - 04
  3. 01 - 03 - 04
  4. 01 - 02 - 04
  5. 01 - 02 - 03
  6. 01 - 02
  7. 01 - 03
  8. 01 - 04
  9. 02 - 03
  10. 02 - 04
  11. 03 - 04
+0

我想這太:) – 2011-03-09 04:13:42

+0

你忘了 「01」, 「02」,「03」和「04」。而且,絕對確切地說,也是空字符串。 – 2011-03-09 05:58:17

+0

但我需要「01」,「02」,「03」和「04」以及空字符串。 – Samuel 2011-03-09 06:08:02

回答

2
DECLARE @s varchar(150); 
SET @s = '01-02-03-05-10'; 
WITH split AS (
    SELECT 
    CAST(SUBSTRING(@s, number * 3 + 1, 2) AS varchar(150)) AS item, 
    rn = number 
    FROM master..spt_values 
    WHERE type = 'P' AND number between 0 AND LEN(@s)/3 
), 
combined AS (
    SELECT 
    item, 
    rn, 
    itemcnt = 1 
    FROM split 
    UNION ALL 
    SELECT 
    item = CAST(c.item + '-' + n.item AS varchar(150)), 
    n.rn, 
    itemcnt = c.itemcnt + 1 
    FROM split n 
    INNER JOIN combined c ON n.rn > c.rn 
) 
SELECT * 
FROM combined 
WHERE itemcnt > 1 
ORDER BY 1