看来模式和领域调整到左边。
如果确实如此,我的头低垂(充满悲伤),这是一个功能。
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 |
+---------------------------------------+------------+
你的领域和模式之间的混合。
该字段可能不包含通配符。
E.g. 这是不是因为“A的
963-4-AKS〜M2RN21AXA150 ~~~ 0C1D1D ~~ XX
963-4-AKS 的匹配A M2RN21AXA150 AAA
用'%'替换'〜'。 –
你为什么认为我做了'REPLACE('%'+ myCriteria +'%','〜','_')'? '_'是一个字符的通配符 – Shadam
但是你只说了第一个和最后一个匹配。所以我提供了另一种解决方案。 –