我一直使用 CONVERT(而不是 CAST),因为我假设前者会识别类型并进行适当的转换,而后者只是试图以不同的方式解释字节流。但刚刚了解到 CAST=CONVERT 用于大多数用途!
但是有人可以解释为什么会发生以下情况。 CAST 对相同的值 (101) 产生不同的结果,但表示方式不同 - 十进制 (101) 和十六进制 (0x65) 表示。
select cast(0x65 as varchar(5))
-----
e
select cast(101 as varchar(5))
-----
101
编辑: 查询是从 SSMS 运行的。
最佳答案
我假设您正在使用 SQL Server(这两个函数之间的混淆是有道理的)。
这很简单。 0x
定义了一个二进制常量。 101
是一个数字常量。这些不是一回事。
当您将二进制常量转换为字符串时,它会尝试将常量解释为字符。将数字转换为字符串时,SQL Server 会转换十进制表示形式。
您可以在 documentation 中了解有关常量的更多信息.
关于SQL Cast 古怪之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51400437/