2017-05-08 14 views
3

SQL 테이블에서 앞에 오는 0을 제거하려고합니다. 3 열을 하나의 열로 결합했습니다. 예를SQL에서 선행 0을 제거하는 방법

col1   col2  col3 
00000  S   Gaskin Road 
      N   Broad Street 
00001     John Rolfe Road 

난 결과로 원하는 : 여기

1 0 S Gaskin Road or just S Gaskin Road 
2 N Broad Street 
3 1 John Rolfe Road 

내가

,COALESCE(CASE WHEN col1 = '' THEN '' ELSE col1 + ' ' END, '') + 
    COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
    COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') as allCol 
+0

는 무엇입니까 귀하의 'col1'의 데이터 형식? – DigiFriend

+0

int로 변환 할 수 있습니까? 숫자 앞에 0이 없습니다. –

+0

col1 (nvarchar (255), null) – john

답변

1

cast COL1이므로 앞에 0이 제거 intcast 연결 용 varcharint한다.

COALESCE(CASE WHEN col1 = '' THEN '' ELSE cast(cast(col1 as int) as varchar(255))+ ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') 
+0

고마워요 vkp this :-) – john

+0

@john. . . 이것은 * col1이 항상 숫자라고 가정하고 * 작동합니다. 집 번호에 관한 나의 경험에서, 그것은 안전한 가정이 아닙니다. –

1

한 가지 방법은 patindex() 사용 3 열을 조인 스크립트입니다. 이를 작성하는 방법에 대한 내 첫번째 생각은 : 당신은 이미 case를 사용해야하는 경우

((case when col1 is null or col1 = '' or col1 = '000000' then '' 
     else substring(col1, patindex('%[^0]%', col1), 6) + ' ' 
    end) + 
    (case when col2 is null or col2 = '' then '' 
     else col2 + ' ' 
    end) + 
    (case when col3 is null or col3 = '' then '' 
     else col3 
    end) 
    ) as allcol 

, 나는 coalesce()에서 혼합에 이점을 볼 수 없습니다.

1

당신은 모든 앞에 0을 제거하기 위해 자신의 함수를 정의 할 수 있습니다

CREATE FUNCTION RemoveLeadingZeros(@value varchar(255)) RETURNS varchar(255) 
AS 
BEGIN 
    while substring(@value, 1, 1) = '0' and datalength(@value) > 1 
    begin 
    set @value = substring(@value, 2, 255) 
    end 

    return @value; 
END 
GO 

은 그래서 3 개 필드의 연결은 지금 될 것입니다 :

,COALESCE(CASE WHEN col1 = '' THEN '' ELSE dbo.RemoveLeadingZeros(col1) + ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') as allCol 
0
COALESCE(CASE WHEN col1 = '' THEN '' ELSE SUBSTRING(col1, PATINDEX('%[^0]%', col1+'.'), LEN(col1))+ ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '')