我有一列可以包含以下可能的值 -
ITO26218361281-简
SBC28791827135 VATS
SOT21092832917 约翰·多伊
TIM INQ12109283291
简·多伊 12/15
我只想从类似于上面的字符串中提取 14 位字母数字短语。如果记录类似于 (5),我仍然希望该记录存在以便能够将其作为错误调用。我不需要完全相同的文本,我只需要将其标记为错误。
预期结果 -
ITO26218361281
SBC28791827135
SOT21092832917
INQ12109283291
JANE DOE 12/15(或标记为错误)
答案 0 :(得分:0)
我假设您使用的是最近的 SQL Server 版本,并且可以访问 STRING_SPLIT()
函数(SQL Server 2016 及更高版本)。
string_split()
函数拆分值。这为您提供了一个 value
列。-
函数从您的第一个示例行中删除破折号 (replace()
)。如果有许多随机尾随字符,您可能需要多准备一些数据。示例数据
create table data
(
input nvarchar(50)
);
insert into data (input) values
('ITO26218361281- JANE'),
('SBC28791827135 VATS'),
('SOT21092832917 JOHN DOE'),
('TIM INQ121092832917');
解决方案
select replace(s.value, '-', '') as result
from data d
cross apply string_split(d.input, ' ') s
where isnumeric(left(s.value, 3)) = 0
and isnumeric(substring(replace(s.value, '-', ''), 4, 100)) = 1;
结果
result
---------------
ITO26218361281
SBC28791827135
SOT21092832917
INQ121092832917
Fiddle 查看实际情况。