TSQL MSSQL 2008r2
我需要帮助来修改数据。我已经走了这么远,现在我需要帮助。
样本数据
[编辑] 添加了其他示例
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 个字符是字母,则slash
在第三个字符后添加 (/)。如果添加后存在任何其他字符,slash
则将其删除。所以对于 [AA11✏AAA ZZZZ] 应该更新为 [AA11✏AAA/]。
如果NCHAR(9999)
存在且前 4 个字符之前有字符,则删除它们。因此,对于 [CRAP BB22✏BBB] 应更新为 [BB22✏BBB/] 对于 [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