模式和字段似乎都向左调整了。
如果确实如此,我低着头(充满悲伤),这里有一个函数。
create function is_a_match (@myField varchar(100),@myCriteria varchar(100))
returns bit
as
begin
declare @i int = 0
,@is_a_match bit = 1
,@len_myField int = len(@myField)
,@len_myCriteria int = len(@myCriteria)
,@myField_c char(1)
,@myCriteria_c char(1)
While 1=1
begin
set @i += 1
if @i > @len_myCriteria break
if @i > @len_myField
begin
set @is_a_match = 0
break
end
set @myField_c = substring(@myField ,@i,1)
set @myCriteria_c = substring(@myCriteria,@i,1)
if not (@myField_c = '~' or @myCriteria_c = '~' or @myField_c = @myCriteria_c)
begin
set @is_a_match = 0
break
end
end
return @is_a_match
end
GO
select myCriteria
,dbo.is_a_match (myField,myCriteria) as is_a_match
from (values ('~63-4-AKS~M' )
,('963-4-AKS1M' )
,('963-4-AKS~M2RN21AXA150AAA' )
,('963-4-AKSAM2RN21AXA150AAA' )
,('963-4-AKSCM2RN21AXA150A060C1D1DSDXX' )
,('963-4-AKS~M2RN21AXA150~~~0C1D1D~~XX' )
,('963-4-AKS~M2RN21AXA150~~~0C1X1D~~XX' )
,('963-4-AKS~M2RN21AXA150~~~0C1D1D~~XXYY')
) c (myCriteria)
,(values ('963-4-AKS~M2RN21AXA150~~~0C1D1D~~XX' )
) f (myField)
+---------------------------------------+------------+
| myCriteria | is_a_match |
+---------------------------------------+------------+
| ~63-4-AKS~M | 1 |
+---------------------------------------+------------+
| 963-4-AKS1M | 1 |
+---------------------------------------+------------+
| 963-4-AKS~M2RN21AXA150AAA | 1 |
+---------------------------------------+------------+
| 963-4-AKSAM2RN21AXA150AAA | 1 |
+---------------------------------------+------------+
| 963-4-AKSCM2RN21AXA150A060C1D1DSDXX | 1 |
+---------------------------------------+------------+
| 963-4-AKS~M2RN21AXA150~~~0C1D1D~~XX | 1 |
+---------------------------------------+------------+
| 963-4-AKS~M2RN21AXA150~~~0C1X1D~~XX | 0 |
+---------------------------------------+------------+
| 963-4-AKS~M2RN21AXA150~~~0C1D1D~~XXYY | 0 |
+---------------------------------------+------------+
您在字段和模式之间进行混合。
该字段可能不包含通配符。
例如
这不是匹配,因为 'A's
963-4-AKS~M2RN21AXA150~~~0C1D1D~~XX
963-4-AKSAM2RN21AXA150AAA