【问题标题】:+ operator on binary types+ 二进制类型的运算符
【发布时间】:2021-01-02 04:21:44
【问题描述】:

当“添加”二进制类型时,将它们的值相加还是将字节连接在一起更常见?例如:

=0x12 + 0xA

这个等于更常见吗:

0x120A

或者:

0x1C

我的意思主要是在 SQL 上下文中,因为我确信在编程语言中使用它时,它会在应用运算符之前将字节转换为数字。这是在 SQL 标准中定义的,还是对供应商实施开放?

这是来自 SQL Server 的参考:String Operators

【问题讨论】:

  • 根据我的经验,通常不会将任何运算符应用于二进制值。可能是因为二进制值通常是表示对象的东西 - 图像、编码文件、加密的标量值、存储的应用程序的结构等。如果您问为什么加号运算符将您的值视为字符串并应用连接,那么这已记录在案。不支持直接对二进制值使用数学;尝试任何其他数学运算符以查看“不兼容”错误消息。
  • @SMor 同意原子/非打包值(图像、哈希等),但如果存储打包值我认为它可能很有用——&|,我想+-~。例如,“哪些用户应用了此电子邮件首选项(位)?”更新所有用户的设置等。

标签: sql sql-server operators byte


【解决方案1】:

这里的问题是您看到+ 并认为是“加法”。这简直太傻了! (开个玩笑。)

SQL Server 重载+,所以它既是加法又是字符串连接。对于二进制常量,使用“字符串”连接。这是在documentation。对于+ 作为补充:

是数字类别中任何一种数据类型的任何有效表达式,位数据类型除外。

然后在page 上为+ 作为字符串连接:

是字符和二进制数据类型类别中任何一种数据类型的任何有效表达式,除了 image、ntext 或 text 数据类型。

因此,SQL Server 决定您确实需要字符串连接。

如果你真的想添加它们,将它们转换为数字并返回二进制:

select cast(cast(0x12 as int) + cast(0xA as int) as binary(1))

【讨论】:

  • SQL Server 实现在其他主要供应商中是通用的,还是每个供应商的实现方式不同?
  • @David542 。 . .这个问题绝对没有标准。只有 SQL Server(以及 Sybase)重载 + 作为字符串连接和 binary 在每个数据库中被唯一处理,如果它甚至被支持的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2011-02-03
相关资源
最近更新 更多