2012-08-07 2 views
1

SQL Server에서 숫자가 포함 된 문자열 열이 있습니다. 필요한 각 항목은 하나의 숫자이므로 파싱이 필요 없습니다. 400에서 450까지의 숫자를 포함하는 모든 행을 찾으려면 약간의 방법이 필요합니다. 대신 :많은 문자열을 빠르게 비교하는 방법은 무엇입니까?

...where my stringcolumn like '%400%' or stringcolumn like '%401%' or stringcolumn like '%402%' or ... 

일부 입력시 절약 할 수있는 방법이 있습니까?

'5335154', [email protected] ','555-555-5555 '와 같은 다른 값도 있습니다. 이를 필터링하는 것은 고려 될 필요가 있습니다.

+1

문자열은 어떻게 생겼습니까? 401뿐 아니라 1401과 일치하길 원하십니까? 14010과 일치 하시겠습니까? –

답변

3
...where stringcolumn like '4[0-4][0-9]' OR stringcolumn = '450' 

뿐만 아니라 반환됩니다 3 자로 제한하려면 와일드 카드를 사용하십시오.

+0

나는 이것이 하나라고 생각한다. 감사. – 4thSpace

2

이를 위해 정규식을 사용하십시오.

...where stringcolumn like '4[0-4][0-9]' OR stringcolumn like '450' 
+0

감사합니다. 순전히 3 자리로 제한하는 방법이 있습니까? 그것은 '5335154', [email protected] ','555-555-5555 '와 같은 다른 것들을 집어 들고 있습니다. 그 질문에 대해 더 분명히해야 할 것입니다. 질문을 업데이트했습니다. – 4thSpace

+0

답변이 업데이트되었습니다. –

0

하나의 방법이

WHERE Column like '%4[0-4][09]%' 
OR Column LIKE '%500%' 

이 그것에 수에 무엇을 선택할 것이라는 점을 명심, 그래서 5000 당신은 필요하지 않습니다

0

나는 다음을 수행합니다 :

select t.* 
from (select t.*, 
      (case when charindex('4', col) > 0 
        then substrint(col, charindex('4', col), charindex('4', col) + 2) 
       end) as col4xx 
     from t 
    ) t 
where (case when isnumeric(col4xx) = 1 
      then (case when cast(col4xx as int) between 400 and 450 then 'true' 
        end) 
     end) = 'true' 

내가 조항의 경우 문을 가진의 팬이 아니에요. 그러나 숫자로 변환하려면이 작업이 필요합니다 (또는 변환이 다른 하위 쿼리의 열이 될 수 있음). 다음은 동일하지 않습니다.

where col4xx between '400' and '450' 

문자열 '44A'가 일치하므로주의해야합니다.

관련 문제