TSQL MSSQL 2008R2を改正するTSQL私はデータを修正するために支援が必要なデータ
をSUBSTRINGのPATINDEXとSTUFFを使用します。 私はこれまでのところ、助けが必要です。
サンプルデータ
[EDIT]のadditonalの例は、私はそうのようなデータを表示したい
DECLARE @Table TABLE (NodePropertyValue NVARCHAR(50))
INSERT INTO @Table (NodePropertyValue)
VALUES
(N'AA11✏AAA ZZZZ'),
(N'CRAP BB22✏BBB'),
(N'CC55✏CC1'),
(N'DD66✏666'),
(N'EE55✏EEE ES177'),
(N'RUBBISH FF22✏FFF XXXXXX'),
(N'NONSENSE')
を追加しました。 NCHAR(9999)
または鉛筆が存在し、次の3文字が文字の場合は、3文字目の後にslash
(/)を追加します。他の文字が追加された後に存在する場合は、slash
を削除してください。だから、[AA11AHAAA ZZZZ]は[AA11AHAAA /]に更新されるべきです。
NCHAR(9999)
が存在し、先行する4文字の前に文字がある場合は、それらを削除してください。したがって、[CRAP BB22UCBB]は[BB22UCBB /]に更新する必要があります。 [NONSENSE]はNULL
と表示されます。
これは私の知る限りが持っているようです。あなたが見る通り、私はslash
を追加し、必要のない文字を削除することに固執しています。
SELECT
V.NodePropertyValue 'Orignal'
,CASE --Pencil NCHAR(9999) exists
WHEN PATINDEX('%'+NCHAR(9999)+'%', UPPER(V.NodePropertyValue)) > 0
THEN
CASE
WHEN --FIRST 4 chars match XX11 and 5th char equals NCHAR(9999)
PATINDEX('[A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue)) > 0
AND SUBSTRING(V.NodePropertyValue, PATINDEX('%[A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue))+ 4, 1) = NCHAR(9999)
THEN
STUFF(V.NodePropertyValue, PATINDEX('[A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue))+ 4
, 50
, SUBSTRING(V.NodePropertyValue, PATINDEX('[A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue))+ 4, 50))
WHEN --Any 4 chars match XX11 and preceding char is space and 5th char equals NCHAR(9999)
PATINDEX('% [A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue)) > 0
AND SUBSTRING(V.NodePropertyValue, PATINDEX('%[A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue))+ 4, 1) = NCHAR(9999)
THEN
STUFF(V.NodePropertyValue, PATINDEX('% [A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue))+ 4
, 50
, SUBSTRING(V.NodePropertyValue, PATINDEX('% [A-Z][A-Z][0-9][0-9]%', UPPER(V.NodePropertyValue))+ 4, 50))
ELSE
NULL
END
ELSE
NULL
END 'Updated'
FROM
@Table V
次の文字列の出力は何ですか? 'N'A1AHA'' –
@ZoharPeledもしそれが例だったなら、結果は' NULL'になります。 –
私はちょうどあなたが言及しなかったパターンについて尋ねています。だからあなたが何を記述するか他のものはnullを返す必要がありますか? –