SQL Server WHERE子句
问题描述:
我有一个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