SQL Cast 古怪之处

标签 sql sql-server casting sql-server-2014

我一直使用 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/

相关文章:

c++:将地址存储为字符串

c# - SQL 插入查询,整天都在工作,但现在每次都失败

sql - 冒险作品说明

sql-server - 存储总数或即时计算?

sql - ")x"在查询中意味着什么?

c - 警告初始化从指针生成整数,无需使用 fgets 进行强制转换

sql - Visual Studio Web 部署卡在输出控制台更新 dll 文件中

sql - Access 查询中的参数?

python - 使用另一个域的用户凭据连接到 SQL Server

c# - 如何将对象转换为 Type 类描述的类型?