正则表达式 2 个字母和 3、4 或 5 位数字



我可以在 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

相关内容

  • 没有找到相关文章

最新更新