2011-03-09 4 views
0
내가 행 "01-02-03-04"예를 들어 문자열에 대한 MS SQL 2008에서 문자열의 모든 가능한 조합으로 구성의 테이블을 반환하고자합니다

: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

도 : –

+0

당신은 "01"를 잊고, "02", "03"및 "04". 그리고, 절대적으로 정확한 것은 빈 문자열입니다. –

+0

하지만 빈 문자열뿐 아니라 "01", "02", "03"및 "04"도 필요합니다. – Samuel

답변

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