如何在where子句中使用文本字段进行算术运算?

时间:2012-02-27 20:00:13

标签: mysql sql sql-server

我有一个8位TEXT字段(称为Code),想要选择“Code mod 3为0”。 我如何在ms-sql中编写这个where子句,特别是?我相信在其他版本的SQL中查询应该是相同的。感谢。

2 个答案:

答案 0 :(得分:5)

首先 - 不要这样做!将标量计算放在where子句中会使它们成为非SARGable,这实际上意味着您不能使用索引并且必须进行表扫描。

其次 - 不要这样做!如果您的任何代码无法转换为INT,那么这将失败。

第三 - 尽管有两个警告,你仍然想要这样做,这就是:

-- If field is varchar
WHERE CAST(Code AS INT) % 3 = 0

-- If field is TEXT
WHERE CAST(CAST(Code AS VARCHAR(10)) AS INT) % 3 = 0

答案 1 :(得分:1)

不确定它在MSSQL中是否相同,但在MySQL中:

SELECT * FROM tbl WHERE Code % 3 = 0;