2017-09-21 6 views
0

私はテーブル名とテーブル名を持っています。以下はそのデータです。アルファベットを削除し、先頭の0を特定の文字数まで挿入します。

ABC123 
ABC1234 
ABC12345 
HA11 
K112 
L1164 

アルファベットを削除して先頭に0を置き、文字の合計長は9にする必要があります。以下は結果です。

00000
0000
000
000000011 
000000112 
000001164 

私はABC(特定のアルファベットセット)のみを変更する方法を知っていますが、私はCASE文を作成することは知らないです。以下は私が成功したものです。

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で動作します。列全体を変更するには、値を1つずつ宣言する必要がありますか?私が値をdeclare @ varchar(20)= Tableから項目を選択するように変更しようとしたので、それは好きではありません。助けてくれてありがとう= D。 –

+0

@AdhityaSanusi編集をご覧ください。また、モデレータの注意を必要としないように答えを受け入れてください。 –

+0

おかげでミハル。あなたは再びそれをしました= D。申し訳ありません。休暇中です。 –

関連する問題