我可以在 SQL Server 中的 SP 中执行正则表达式并捕获包含 2 个字母和 3、4 或 5 位数字的字符串的一部分吗?
字符串可以是这样的:
"Joe Brown AB12345 21223355"
或
"Joe Brown AB1234 21223355"
或
"Joe Brown AB123 21223355"
我想找到AB12345,AB1234,AB123
我已经尝试过这个:
SUBSTRING(Name, (PATINDEX('%[A-Za-z][A-Za-z][0-9][0-9][0-9][0-9]%',[Name])),7)
一种选择是使用 string_split((。
请注意,最后两个 OR 可能不是必需的,只是更精确。
例
Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values
('Joe Brown AB12345 21223355')
,('Joe Brown AB1234 21223355')
,('Joe Brown AB123 21223355')
Select *
From @YourTable A
Cross Apply string_split(SomeCol,' ') B
Where B.value like '[A-Z][A-Z][0-9][0-9][0-9]'
or B.value like '[A-Z][A-Z][0-9][0-9][0-9][0-9]'
or B.value like '[A-Z][A-Z][0-9][0-9][0-9][0-9][0-9]'
返回
SomeCol value
Joe Brown AB12345 21223355 AB12345
Joe Brown AB1234 21223355 AB1234
Joe Brown AB123 21223355 AB123
不是最漂亮的,但应该可以工作...
declare @s varchar(32) = 'select [NAME] from ...';
select case
when patindex('%[A-Za-z][A-Za-z][0-9][0-9][0-9][0-9]%', @s) > 0
then substring(@s, patindex('%[A-Za-z][A-Za-z][0-9][0-9][0-9][0-9]%', @s), 7)
when patindex('%[A-Za-z][A-Za-z][0-9][0-9][0-9]%', @s) > 0
then substring(@s, patindex('%[A-Za-z][A-Za-z][0-9][0-9][0-9]%', @s), 6)
when patindex('%[A-Za-z][A-Za-z][0-9][0-9]%', @s) > 0
then substring(@s, patindex('%[A-Za-z][A-Za-z][0-9][0-9]%', @s), 5)
end