2012-06-22 3 views
0

sql (MS SQL 서버 2008)을 사용하여 텍스트 형식을 지정하려고합니다. 나는 빈 문자열이나 어떤 종류의 텍스트를 반환 할 세 가지 변수가있다. 결코 null이 될 수 없다. 다음과 같은 방식으로 텍스트를 표시하고 싶습니다.
@ Var1 = 'A'@ Var2 = 'B'@ Var3 = 'C'==> A, B, C
@ Var1 = 'A'@ Var2 = 'C'VAR3 = @ '==> A, C
@ VAR1 ='변수 2를 대입 할 때 변수 = 'B'@ VAR3 = 'C'==> B, C
@ VAR1 = '@ 변수 2를 대입 할 때 변수 = ''@ Var3 = 'C'==> C
.
.
.
@ VAR1 = ''@ 변수 2를 대입 할 때 변수 = ''@ VAR3 = ''==>
등등 여기 SQL 빈 문자열 및 텍스트 서식 지정

이 ...

DECLARE @Var1 NVARCHAR(100) 
DECLARE @Var2 NVARCHAR(100) 
DECLARE @Var3 NVARCHAR(100) 
SET @Var1 = 'A' 
SET @Var2 = 'B' 
SET @Var3 = 'C' 
SELECT 
ISNULL(NULLIF(@Var1,''), '') 
    + 
     CASE 
      WHEN NULLIF(@Var1,'') IS NOT NULL AND NULLIF(@Var2,'') IS NOT NULL THEN ', ' ELSE '' 
     END 
    + 
ISNULL(NULLIF(@Var2,''),'') 
    + 
     CASE 
      WHEN NULLIF(@Var2,'') IS NOT NULL AND NULLIF(@Var3,'') IS NOT NULL THEN ', ' ELSE '' 
     END 
    + 
ISNULL(NULLIF(@Var3,''),'') 

내가 무슨의 단순화 된 버전입니다 나는 기분 중요한 세부 사항이 빠져 있습니다. 명확한 설명이 필요한 경우 알려주십시오.

답변

3

시도 :

select reverse(stuff(reverse(
     case when len(@Var1) > 0 then @Var1 + ', ' else '' end + 
     case when len(@Var2) > 0 then @Var2 + ', ' else '' end + 
     case when len(@Var3) > 0 then @Var3 + ', ' else '' end 
     ), 1, 2, '')); 

여기서 중요한 점은 SQL Server가 텍스트가 아닌 아주 좋은입니다 당신이있어 : 포맷 :

select case 
     when str is null then '' 
     else left(str, len(str)-1) -- Remove last comma 
     end 
from (
     select case when len(@Var1) > 0 then @Var1 + ', ' else '' end + 
       case when len(@Var2) > 0 then @Var2 + ', ' else '' end + 
       case when len(@Var3) > 0 then @Var3 + ', ' else '' end as str 
     ) as SubQueryAlias 

아니면 reverse 트릭

가 하위 쿼리를 피하기 위해 C#과 같은 클라이언트 측 언어로 무한히 나아졌습니다.

Live example at SQL Fiddle.

+0

마지막 쉼표를 제거해야합니다. –

+0

불행히도 웹 서비스가 저장 프로 시저를 호출하고 XML로 반환 된 내용을 변환한다는 배경이 있기 때문에 사용할 수있는 옵션이 없습니다. 클라이언트 측 언어를 사용할 수있는 곳이 없습니다. –

+0

@ user1401635 - XML을 어떻게 사용합니까? 그 대신에 3 가지 항목을 다룰 수 있을까요? 'xxxx yyy'? – MatBailie