SQL Server 2016 上浮点值的按位运算

Bit wise operation on float value on SQL Server 2016

我想执行一个简单的更新,并使用以下代码打开位 SQL。

UPDATE table SET BoolFields = BoolFields + 1.0 WHERE BoolFields & 1.0 <> 1.0

但是,当我在 Management Studio 上 运行 时,我收到

Operand data type float is invalid for '&' operator.

在不将 BooFields 从 float 更改为其他类型的情况下,是否有人知道解决此问题的线索?

编辑

有人评论我的情况不清楚所以编辑。

条件是我要检查某个位是否被标记为1。 所以我的实际行可能是 BoolFields & 128.0 <> 128.0

然后

我愿意SET BoolFields = BoolFields + 128.0

所以我只想在布尔值未标记为 1 时标记它。

如果您确实需要在 浮点值上使用 bitwise 运算符——它不支持它们——你需要将它们转换为支持按位运算的类型,如 bitint(此处列出 https://msdn.microsoft.com/en-us/library/ms176122.aspx),即:

update table set BoolFields = BoolFields + 1.0 where cast(BoolFields as int) & 1 <> 1

但在我看来,您应该考虑对浮点数范围进行操作,而不是强制按位运算符。也许您应该描述一个用例以阐明您为什么要这样做。