我试图创建一个表“ MyTable”,并添加一个具有小整数类型的字段“ field1”。
然后,我向field1添加一个负数-12289。
然后,我执行以下SQL查询:
select field1 ^ 0xcfff from MyTable
结果为零。
但是,如果我用十进制整数常量替换十六进制整数常量,如下所示:
select field1 ^ 53247 from MyTable
其结果是-65536。
为什么?
The only clue is on https://docs.microsoft.com/en-us/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql?view=sql-server-ver15
大于2,147,483,647的整数常量将转换为十进制数据类型,而不是bigint数据类型。
但是0xcfff和53247都比2,147,483,647小得多。为什么它们会产生差异结果?
这是因为数据的长度。 执行按位运算符时,应使用相同的字节长度:
您可以尝试更改长度: