2017-09-21 18 views
0

테이블 이름과 테이블 이름이 있습니다. 아래는 데이터입니다.알파벳 제거 및 선행 0을 특정 문자 길이까지 삽입

ABC123 
ABC1234 
ABC12345 
HA11 
K112 
L1164 

알파벳을 제거하고 0으로 바꾸고 총 문자 길이를 9로해야합니다. 결과는 다음과 같습니다.

00000
0000
000
000000011 
000000112 
000001164 

는 난 단지 그러나 나는 CASE 문을 작성 해야할지 모르겠다 ABC (특정 문자 집합)에 대한 변경하는 방법을 알고있다. 아래는 내가 성공한 것입니다.

select REPLICATE('0',9-LEN(A.B)) + A.B 
from 
(select replace(Item, 'ABC','') as B from Table) as A 

나는 CASE와 SELECT를 결합하려고 시도했지만 그럴 것 같지 않습니다.

Case when Item like '%ABC%' then 
      select REPLICATE('0',9-LEN(A.B)) + A.B 
      from 
      (select replace(Item, 'ABC','') as B from Table) as A 
    when Item like '%HA%' then 
      select REPLICATE('0',9-LEN(A.B)) + A.B 
      from 
      (select replace(Item, 'HA','') as B from Table) as A 
    when Item like '%K%' then 
      select REPLICATE('0',9-LEN(A.B)) + A.B 
      from 
      (select replace(Item, 'K','') as B from Table) as A 
    when Item like '%L%' then 
      select REPLICATE('0',9-LEN(A.B)) + A.B 
      from 
      (select replace(Item, 'L','') as B from Table) as A 
    else Item 
    End 

결과를 얻는 방법을 아는 사람이 있습니까? SQL Server 2012를 사용하고 있습니다.

감사합니다.

답변

1

데이터의 시작 부분에만 글자가 있다고 가정했습니다. 테이블에 적용 측면에서

declare @s varchar(20) = 'ABS123' 
-- we find index of first occurence of digit and then we cut out the letters 
set @s = right(@s, len(@s) - patindex('%[0-9]%', @s) + 1) 
-- here we just produce string with amount of zeros we need 
select left('000000000', 9 - len(@s)) + @s 

:

select left('000000000', 9 - len([Digits])) + [Digits] from (
    select right([Item], len([Item]) - patindex('%[0-9]%', [Item]) + 1) as [Digits] from [Table] 
) 
+0

감사 미갈. 그것은 작동 = D. 그래서 전체 열을 변경하려면 하나씩 값을 선언해야합니까? 값을 @svarchar (20) = Table에서 항목 선택으로 변경하려고 했으므로이 값이 마음에 들지 않습니다. 도와 주셔서 다시 한번 감사드립니다 = D. –

+0

@AdhityaSanusi 편집을 참조하십시오. 또한 운영자의주의가 필요하지 않도록 대답을 수락하십시오. –

+0

감사합니다. Michal. 너는 다시 해냈어. D. 답장하는 데 너무 오래 걸려서 미안해. 휴가 동안. –