我有一个名为“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
LEFT(PersonNameID,
CASE WHEN PersonNameID LIKE '%[0-9]%' AND CHARINDEX('-', PersonNameID) > 0
THEN
CHARINDEX('-', PersonNameID)-1
ELSE
LEN(PersonNameID)
END) AS NewPersonId
FROM
Person
关于sql - sql server 中数字的子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17873490/