我一直使用CONVERT(而不是CAST),因为我假设前者会识别类型并进行适当的转换,而后者只是试图以不同的方式解释字节流。但只是了解到CAST = CONVERT可以用于大多数用途!
但是有人可以解释为什么发生以下情况。 CAST对于相同的值(101)会产生不同的结果,但表示方式有所不同-十进制(101)和十六进制(0x65)表示形式。
select cast(0x65 as varchar(5))
-----
e
select cast(101 as varchar(5))
-----
101
编辑: 该查询是从SSMS运行的。
答案 0 :(得分:4)
我假设您正在使用SQL Server(这两个函数之间的混淆很有意义)。
很简单。 0x
定义了一个二进制常量。 101
是一个数字常数。这些不是一回事。
将二进制常量转换为字符串时,它将尝试将常量解释为字符。当您将数字转换为字符串时,SQL Server会转换十进制表示形式。
您可以在documentation中进一步了解常量。
答案 1 :(得分:2)
您正在尝试转换为完全不同的值。正如戈登所说,一个是二进制表示形式,另一个是数字表示形式。
但是您需要注意CAST
和CONVERT
之间存在一些差异:
- CAST是ANSI-SQL规范的一部分;而CONVERT不是。实际上,CONVERT是特定于Microsoft SQL Server实现的。
- CONVERT的不同之处在于它接受可选样式 用于格式化的参数。
在此处了解更多信息:https://www.essentialsql.com/what-is-the-difference-between-cast-and-convert/