패턴과 필드 왼쪽으로 조정됩니다 보인다.
내 머리를 숙이고 (슬픔이 가득 찬 채로) 이것이 사실이라면, 여기에 기능이 있습니다.
+---------------------------------------+------------+
| 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 |
+---------------------------------------+------------+
당신은 필드와 패턴 사이에 혼합되어
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)
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
.
필드에 와일드 카드가 들어 있지 않을 수 있습니다.
예. 이 때문에 'A의
963-4-AKS ~ M2RN21AXA150 ~~~ 0C1D1D ~~ XX
963-4-AKS 의 일치가 아닌 M2RN21AXA150 AAA
'~'를'%'로 대체하십시오. –
왜 'REPLACE ('% '+ myCriteria +'% ','~ ','_ ')'라고 생각하십니까? '_'는 한 글자의 와일드 카드입니다 – Shadam
하지만 첫 번째와 마지막 경기 만 말했습니다. 그래서 나는 또 다른 해결책을 제시하고 있었다. –