2014-03-27 1 views
0

SQL Server 2008 R2에서 작업하고 있습니다. 'ACS'와 같은 특정 문자 집합을 찾기위한 쿼리를 만들고 있지만 'Non ACS'또는 'Non-ACS'가 포함 된 결과를 반환하지 않으려합니다 (왜 데이터가 일관성이 없다는 것은 저를 넘어서 있습니다). 나는 쿼리를 짧게 유지하기 위해 정규 표현식을 사용하고 싶다. 내가 시도한 것은 :sql patern이 공백이나 문자를 찾습니다.

WHERE ((tblTasks.strTask LIKE '%ACS%' COLLATE Latin1_General_CS_AS) AND (tblTasks.strTask NOT LIKE '%NON[-, ]ACS%' COLLATE Latin1_General_CS_AS)) 

이것은 작동하지 않습니다.

WHERE ((tblTasks.strTask LIKE '%ACS%' COLLATE Latin1_General_CS_AS) AND ((tblTasks.strTask NOT LIKE '%NON-ACS%' COLLATE Latin1_General_CS_AS) AND (tblTasks.strTask NOT LIKE '%NON ACS%' COLLATE Latin1_General_CS_AS))) 

어떻게 하나의 공간 또는 두 단어/문자 집합 사이의 대시를 찾을 않습니다

나는 다음과 같은 WHERE 절을 피하기 위해 노력하고 있어요?

그리고 멋진 것 같은 것을 할 수있는 경우 :

WHERE (tblTasks.strTask LIKE '%^[NON]^[-, ]ACS%' COLLATE Latin1_General_CS_AS) 
+0

당신은 단지 공간을 찾거나 그냥 단순히 '% 1 %'또는 mycolumn 추천하기 추천 mycolumn'도 찾아보실 수 있습니다 대시하려고하면 '% - %' 'I 왜 정규 표현식이 필요한지 이해하지 못합니다. –

+0

REGEX_LIKE가 있습니까? – sln

+0

@VladimirOselsky 'NON ACS'또는 'NON-ACS'가 아닌 'ACS'가있는 행만 필요하기 때문에 정규 표현식이 필요합니다. '% %'또는 '% - %'를 사용하면 관련이없는 값이 반환됩니다. – Rob

답변

0

이 시도 :

select * from <table> 
WHERE field LIKE '%ASC%' and field not like '%NON[ ,-]ASC%' 


create table #lookfor (theFld VARCHAR(200)) 
insert into #lookfor 
    values ('ASC'),('NON-ASC'),('NON ASC'),('NON,ASC') 

select * from #lookfor 

select * from #lookfor where thefld like '%ASC%' 
     and theFld not like '%NON[ ,-]ASC%' 

drop table #lookfor 
+0

나는 어제 이것을 시도했다고 맹세 할 수 있었지만 작동하지 않았다. 이제 내가이 한 절만 증류 할 수 있다면. :-) – Rob

0

SQL Server가 정규식의 작업을 수행 할 수 있습니다 또는 무엇 엔진이없는 경우,하지만
현대 엔진이 될 경우 나도 몰라를 이 정규식을 수행 할 수 있습니다.

자격에 필요한 다른 항목에 따라 미리보기가있는 ACS(?<!(?i:Non)[- ]ACS) 또는
과 같은 모양을 사용하여 수행 할 수 있습니다.

# (?=ACS(?<!Non[- ]ACS))  

(?=      # Lookahead to find the 'ACS' 
     ACS 
     (?<! Non [- ] ACS)  # Inner lookbehind, not 'Non ACS' nor 'Non-ACS' 
) 
# Here, we matched 'ACS' 

'NON'의 경우 대소 문자를 구분하지 않으므로 'ACS'는 여전히 강제 대문자입니다.

(?=ACS(?<!(?i:Non)[- ]ACS))

+0

CLR 함수가 정의되고로드되도록 설정된 경우 Regexes를 SQL Server에서만 사용할 수 있습니다.이 경우 CLR 함수는 .NET 다양한 다양한 정규 표현식을 사용합니다. [이 기사] (http://msdn.microsoft.com/en-us/magazine/cc163473.aspx)를 참조하십시오. –

+0

정보를 제공해 주셔서 감사합니다! – sln

관련 문제