2014-09-03 3 views
0

이 같은 전화 번호를 포함하는 테이블이 있습니다 SQL 서버 정규식 선택

Phone# 
------------------ 
1234567890 
2548796584 
9999 
2126543133 
9999999999 
999999 
999 
9853 
9999999 

지금 내가해야한다,이 경우 결과에, 그 안에 숫자 만 9를 가진 행을 반환하는 쿼리를하고자합니다.

Phone# 
------------------ 
9999 
9999999999 
999999 
999 
9999999 

오라클에서는 regex에 대해 들었지만 Sql Server에서는 그렇지 않습니다. SQL Server 2008 R2를 사용하고 있습니다. 누군가 제발 저에게 미리 감사드립니다.

+0

이 경우 정규 표현식을 사용할 필요가 없습니다. 필요하면 'Phone # like'% 9 % ''문자 유형으로 변환하면됩니다. – Laurence

+2

그건 그들이 @Laurence가 원하는 것을하지 않을 것입니다. 영업 사원은 유일한 가치가 9 인 행을 반환하기를 원한다고 말했습니다. –

+0

@SeanLange 아주 옳았습니다. – Laurence

답변

4

여기에 CLR을 사용하는 것보다 훨씬 간단한 방법이 있습니다. 이 패턴이 작동하는 이유는 NOT 9를 좋아하지 않는 행을 찾는 것입니다. RegEx의 당근 (^)은 NOT을 의미합니다.

create table #Phones 
(
    Num varchar(20) 
) 

insert #Phones 
select '1234567890' union all 
select '2548796584' union all 
select '9999' union all 
select '2126543133' union all 
select '9999999999' union all 
select '999999' union all 
select '999' union all 
select '9853' union all 
select '9999999' union all 
select '12345' 

select * 
from #Phones 
where Num not like '%[^9]%' 
+0

LIKE 패턴이 의미하는 것을 설명에 추가하면 승리합니다! – gvee

+2

다음과 같은'% 9 % '와 (과) 같은 점을 고려하십시오. 이것은 * 9 *를 포함하지 않는 ** 모든 행을 반환합니다. 비슷하게,''% [0-9 %] ''는 숫자를 포함하지 않는 모든 행을 반환합니다. 사각형 괄호를 사용하면 범위 값을 사용할 수 있습니다. 이제 재미있는 부분이 있습니다 : 캐럿'^'! 이것은 우리가 * 범위에 포함되지 않은 것들을 검색 할 수있게 해줄 것이며, 따라서 우리는 '어디에도 같지 않습니다'% [^ 9] % ''를 제공합니다. 9 행을 제외한 모든 행을 반환합니다. 즉, 9 행을 포함하는 행을 반환합니다. – gvee

+0

감사합니다 !!! 그것은 효과가 있었다. – yogi

0

SQL Server가 정규식 기능을 제한하고있다,하지만 당신은 add it using common language runtime procedures을 할 수 있습니다

select * from Phones 
where 1 = dbo.RegExpLike(number, '^9+$') 

당신은 여기에 정규식을 사용하는 방법에 대한 더 많은 예제를 확인할 수 있습니다. 아래 코드를 사용하여 원하는 것을 얻을 수 있습니다.

declare @table table (
    [phone] [sysname]); 
insert into @table 
     ([phone]) 
values  (N'1234567890'), 
     (N'2548796584'), 
     (N'9999'), 
     (N'2126543133'), 
     (N'9999999999'), 
     (N'999999'), 
     (N'999'), 
     (N'9853'), 
     (N'9999999'); 
select [phone] from @table 
where patindex('%[0-8]%', [phone]) = 0; 
+1

꽤 기초적인 정규식 기능을 가지고 있습니다. 내 대답을 보라. –

0

이 쿼리를 시도 할 수 있습니다.

SELECT * FROM Phones 
WHERE Number NOT LIKE '%[^9]%' 
+0

키란 - 전화 번호는 종종 숫자가 아닌 문자를 포함 할 수 있습니다. '+','()'','-'를 사용하면됩니다. – gvee

+0

당신이 옳습니다. 나는 조금 대답을 바꿀 수 있었다. –