我有一個SQL Server數據庫,我想定義一個查詢,它返回的結果僅基於int列中的前兩個數字。SQL Server WHERE子句
喜歡的東西:
SELECT * FROM myTable WHERE myIntColumn = 13%
因此,與13,133,134和1380的所有行會退還
我有一個SQL Server數據庫,我想定義一個查詢,它返回的結果僅基於int列中的前兩個數字。SQL Server WHERE子句
喜歡的東西:
SELECT * FROM myTable WHERE myIntColumn = 13%
因此,與13,133,134和1380的所有行會退還
沒什麼特別的,只是改變爲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
你需要將數字轉換成字符串:
SELECT * FROM myTable WHERE convert(varchar, myIntColumn) like '13%'
待辦事項考慮到此查詢可能不會從myIntColumn
字段的索引中受益。
您不必明確轉換列(將隱式進行,由於LIKE)
SELECT * FROM myTable WHERE myIntColumn like '13%'
只是考慮,你可以用數學來達到同樣的效果,這可能會更快
SELECT * FROM myTable
WHERE myIntColumn/NULLIF(POWER(10,LEN(myIntColumn)-2),0) = 13
如果性能是一個問題,考慮在包含預轉換值的表中添加一個varchar列。在此列中添加一個索引,您的查詢應該快得多,但需要一點額外的存儲空間。 – Ray 2011-02-05 15:50:36