2011-02-05 152 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