0

私の前の質問は-新しい列に部分文字列を挿入する

同じ列で実行したい2つのケースがあります。

最初 -

SET [ref_id] = CASE 
WHEN CHARINDEX('-', [full_id]) = 4 
THEN SUBSTRING([full_id], 1, 3) ELSE NULL

二番目 -

SET [ref_id] = CASE 
WHEN CHARINDEX('ZZZ-', [full_id]) = 1 
THEN SUBSTRING([full_id], 5, 3) ELSE NULL

私の[full_id]列のデータ形式は主にですがABC-123D2-45FG67、一部はすべて数字であるか、接頭辞が付いていますZZZ-

データが数値のみの場合、[ref_id]列をNULLにします。

データの前にプレフィックスが付いている場合は、ZZZ-その部分をスキップします。

データがそうではなくZZZ-、で始まる場合はABC-、コピーしたいABC(場合によっては存在AB-1234し、それはNULLである必要があります)。

私のコードは、2つの文字列が一緒に機能せず、別々に実行すると前のクエリの作業をキャンセルすることを除いて、正常に機能します。

123456両方を実行して、次のような形式のデータに対してのみNULLSで終わるにはどうすればよいですか?AB-1234

お手伝いありがとう。

4

2 に答える 2

2

これには、単一のcaseステートメントを使用します。

SET [ref_id] = CASE WHEN CHARINDEX('ZZZ-', [full_id]) = 1 
                    THEN SUBSTRING([full_id], 5, 3)
                    WHEN CHARINDEX('-', [full_id]) = 4 
                    THEN SUBSTRING([full_id], 1, 3)
                    ELSE NULL
               END
于 2012-10-05T15:08:56.050 に答える
0

これは、ケースステートメントをネストする単なるケースではありませんか?

SET [ref_id] = CASE WHEN CHARINDEX('ZZZ-', [full_id]) = 1 THEN SUBSTRING([full_id], 5, 3) ELSE 
  (CASE WHEN CHARINDEX('-', [full_id]) = 4 THEN SUBSTRING([full_id], 1, 3) ELSE NULL end ) end

編集:最後に向かって「elsenull」を削除しました。それが良いと思います。テストできるサーバーがありません。

于 2012-10-05T14:41:02.877 に答える