这实际上是一个正则表达式问题,而不是SQL问题,所以这里是:
我有一个存储过程,我需要比较一个字符串来检查字符的第4个“组”
说我有一个像这样的字符串G7-8855-99-443-8877
我想要的是数字的第四个“块”,即。 443
另一种说法是第3和第4个破折号之间的组
用短划线分隔的块可以是1到3个字母数字值。
我可以使用的另一个选项是分割字符串
[编辑]
我使用TSQL
答案 0 :(得分:0)
根据您的想法,这里有两种可能性。他们都使用SQLCLR。一个使用RegEx捕获组,另一个使用分割字符串。您可以在许多网站上找到关于如何同时执行这两个操作的大量示例,或者您可以只下载SQL#库(我写过,但这里显示的这些函数都是免费版本)。
-- If there are always 4 dashes, capture what is between the last 2 dashes
-- (the rest of the match is discarded as we are only grabbing what is in the group)
SELECT SQL#.RegEx_CaptureGroup(N'G7-8855-99-443-8877', N'-([^-]*)-[^-]*$',
1, NULL, 1, 0, '');
-- If there are always 4 dashes, match what is between the last 2 dashes
-- (using positive lookbehind and lookahead since they aren't part of the match)
SELECT SQL#.RegEx_MatchSimple4k(N'G7-8855-99-443-8877', N'(?<=-)[^-]*(?=-[^-]*$)',
1, '');
-- Using a string split.
-- For single values this is fine, but for using in a query the scalar functions
-- above are probably better.
SELECT split.SplitVal
FROM SQL#.String_Split4k(N'G7-8855-99-443-8877', N'-', 1) split
WHERE split.SplitNum = 4