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

RJI*_*IGO 0 mysql sql sql-server

我有一个8位TEXT字段(称为代码),并希望选择"代码mod 3为0".我如何在ms-sql中编写这个where子句,特别是?我相信在其他版本的SQL中查询应该是相同的.谢谢.

Vin*_*zzi 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
Run Code Online (Sandbox Code Playgroud)