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 运算符——它不支持它们——你需要将它们转换为支持按位运算的类型,如 bit
或 int
(此处列出 https://msdn.microsoft.com/en-us/library/ms176122.aspx),即:
update table set BoolFields = BoolFields + 1.0 where cast(BoolFields as int) & 1 <> 1
但在我看来,您应该考虑对浮点数范围进行操作,而不是强制按位运算符。也许您应该描述一个用例以阐明您为什么要这样做。
我想执行一个简单的更新,并使用以下代码打开位 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 运算符——它不支持它们——你需要将它们转换为支持按位运算的类型,如 bit
或 int
(此处列出 https://msdn.microsoft.com/en-us/library/ms176122.aspx),即:
update table set BoolFields = BoolFields + 1.0 where cast(BoolFields as int) & 1 <> 1
但在我看来,您应该考虑对浮点数范围进行操作,而不是强制按位运算符。也许您应该描述一个用例以阐明您为什么要这样做。