2011-02-05 8 views
0

SQL Server 데이터베이스가 있고 int 열의 처음 두 숫자 만 기반으로 결과를 반환하는 쿼리를 정의하려고합니다. 같은SQL Server WHERE 절

뭔가 : 그래서 13, 133, 134 및 1380있는 행이

답변

5

아무것도 공상 반환되는

SELECT * FROM myTable WHERE myIntColumn = 13% 

, 그냥 VARCHAR 및 패턴 일치로 변경합니다.

SELECT * FROM myTable 
    WHERE CAST(myIntColumn as varchar(10)) LIKE '13%' 

당신은 (10)의 힘에 의해 divde을 정수 할 수 있지만, 당신은 숫자를 문자열로 변환해야 루프 또는 재귀

;WITH cTE AS 
(
    SELECT TOP 9 
     POWER(10, ROW_NUMBER() OVER (ORDER BY column_id)) AS divisor 
    FROM 
     sys.columns 
) 
SELECT 
    * 
FROM 
    myIntColumn 
    JOIN 
    cTE ON myIntColumn/divisor = 13 
4

입니다 :

SELECT * FROM myTable WHERE convert(varchar, myIntColumn) like '13%' 

이 고려 않는 이 쿼리는 아마도 myIntColumn 필드의 인덱스로부터 이익을 얻지 못할 것입니다.

에게 는
+1

성능이 문제가 될 경우 사전 변환 된 값이 들어있는 테이블에 varchar 열을 추가하는 것이 좋습니다. 이 열에 색인을 추가하면 약간의 추가 저장 공간을 사용하여 쿼리 속도가 훨씬 빨라집니다. – Ray

1
당신은 명시 적으로 열을 캐스팅하지 않아도

SELECT * FROM myTable WHERE myIntColumn like '13%' 

그냥 고려,이 같은 결과를 달성하기 위해 수학을 사용할 수 있습니다 (이 때문에 LIKE에 암시 적으로 수행됩니다), 빠를 수있는

SELECT * FROM myTable 
WHERE myIntColumn/NULLIF(POWER(10,LEN(myIntColumn)-2),0) = 13