からSQL Serverテーブル:更新CTEとケースの文
WITH CTE AS
(
SELECT
LTRIM(RTRIM([EMP_ID])) AS empID
FROM
[SAMPLE].[dbo].[segments]
)
SELECT
(CASE WHEN LEN(LTRIM(RTRIM(EMPID))) = 5
THEN RIGHT(('100' + EMPID), 8)
WHEN LEN(LTRIM(RTRIM(EMPID))) = 6
THEN RIGHT(('10' + EMPID), 8)
WHEN LEN(EMPID) = 7
THEN RIGHT('10' + (LEFT(LTRIM(EMPID), 6)), 8)
ELSE empID
END) EMP_ID
FROM CTE
私は何をしたいの新しい8桁のIDに私のemp_id
列を更新するために、上記の状態を使用しています。スクリプトを実行すると、テーブルを更新するだけでIDが正しく返されます。
私は次のことを試してみましたし、それがなかった、すべてのすべてのIDと同じ
WITH CTE AS
(
SELECT
LTRIM(RTRIM([EMP_ID])) AS empID
FROM
[SAMPLE].[dbo].[segments]
)
UPDATE segments
SET EMP_ID = (case when len(ltrim(rtrim(EMPID))) = 5 then right(('100' + EMPID),8)
when len(ltrim(rtrim(EMPID))) = 6 then right(('10' + EMPID),8)
when len(EMPID) = 7 then right('10'+(left(ltrim(EMPID),6)),8)
else empID
end)
FROM CTE
作られた、このために使用する正しいUPDATE
文は何ですか?
を試すことができますか?なぜCTEですか? – Eric
EmpIDに数字以外の文字が含まれていますか? –
ああ、すでに文字列の長さが5文字で、3を前に付けることをチェックしたときには、文字列を再び8にトリムする必要はありません。 6と2と同じです。 –