我有一个名为“ PersonNameID”的列名
包含两个值
ABCD-GHJI
ABHK-67891
HJKK-HJJJMH-8990
我只需要提取“ PersonNameID”的第一部分,其中包含“-”之后的数字。理想情况下,我的输出应该是
ABCD-GHJI
ABHK
HJKK-HJJJMH
但是当我使用以下代码时:
SELECT TOP 100
CONVERT(NVARCHAR(100),
SUBSTRING(PersonNameID, 1,
CASE
WHEN CHARINDEX('-', PersonNameID) > 0
THEN LEN(PersonNameID) -
LEN(REVERSE(SUBSTRING(REVERSE(PersonNameID), 1, CHARINDEX('-', REVERSE(PersonNameID)))))
ELSE LEN(PersonNameID)
END
)
) AS New_PersonNameID
FROM Person
我得到的输出为
ABCD
ABHK
HJKK
是否对以上代码进行了修改以获得所需的输出?
使用模式匹配找到数字,然后找出数字在哪里
怎么样?
SELECT TOP 100
(CASE
WHEN CHARINDEX('-',PersonNameID )>0 AND
iSNUMERIC( rIGHT(PersonNameID ,CHARINDEX('-',PersonNameID )))=1
THEN
lEFT(PersonNameID ,CHARINDEX('-',PersonNameID)-1)
ELSE
PersonNameID
END
) AS New_PersonNameID
FROM Person
[-之后的任何数字都将被删除。您可以根据需要使用patindex模式。
我已经找到了解决上述情况的方法...