2011-02-05 200 views
0

我有一個SQL Server數據庫,我想定義一個查詢,它返回的結果僅基於int列中的前兩個數字。SQL Server WHERE子句

喜歡的東西:

SELECT * FROM myTable WHERE myIntColumn = 13% 

因此,與13,133,134和1380的所有行會退還

回答

5

沒什麼特別的,只是改變爲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 2011-02-05 15:50:36

1

您不必明確轉換列(將隱式進行,由於LIKE)

SELECT * FROM myTable WHERE myIntColumn like '13%' 

只是考慮,你可以用數學來達到同樣的效果,這可能會更快

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