更新时间:2026-07-03 GMT+08:00
分享

算术运算符

算术运算符包括双目运算与单目运算,这些运算符都将返回数字类型。

表1 算术运算符

运算符

返回类型

描述

A + B

所有数字类型

A和B相加。结果数据类型与操作数据类型相关,例如一个整数类型数据加上一个浮点类型数据,结果数值为浮点类型数据。

A–B

所有数字类型

A和B相减。结果数据类型与操作数据类型相关。

A * B

所有数字类型

A和B相乘。结果数据类型与操作数据类型相关。

A / B

所有数字类型

A和B相除。结果是一个double(双精度)类型的数值。

A % B

所有数字类型

A对B取余数,结果数据类型与操作数据类型相关。

A & B

所有数字类型

查看两个参数的二进制表示法的值,并执行按位”与”操作。两个表达式的一位均为1时,则结果的该位为1。否则,结果的该位为0。

A | B

所有数字类型

查看两个参数的二进制表示法的值,并执行按位”或”操作。只要任一表达式的一位为1,则结果的该位为 1。否则,结果的该位为0。

A ^ B

所有数字类型

查看两个参数的二进制表示法的值,并执行按位”异或”操作。当且仅当只有一个表达式的某位上为1时,结果的该位才为1。否则结果的该位为0。

~A

所有数字类型

对一个表达式执行按位”非”操作(取反)。

注意事项

  • 整数除法使用div函数,/ 运算符始终返回DOUBLE类型。
  • ANSI模式下(Spark 4.0默认开启),整数除以零将抛出异常而非返回NULL。
  • 位运算符(&、|、^、~)仅适用于整数类型。
  • % 取余运算符与 mod() 函数等效。

示例1:基本四则运算

SELECT 1 + 2;    -- 3
SELECT 5 - 3;    -- 2
SELECT 2 * 3;    -- 6
SELECT 10 / 3;   -- 3.333...

示例2:取余运算

SELECT 10 % 3;   -- 1
SELECT 7 % 2;    -- 1

示例3:位运算

SELECT 5 & 3;    -- 1   (0101 & 0011 = 0001)
SELECT 5 | 3;    -- 7   (0101 | 0011 = 0111)
SELECT 5 ^ 3;    -- 6   (0101 ^ 0011 = 0110)
SELECT ~5;       -- -6  (按位取反)

示例4:混合类型运算

SELECT 1 + 2.5;      -- 3.5 (整数+浮点=浮点)
SELECT 10 / 3;        -- 3.333... (除法返回DOUBLE)
SELECT CAST(10 AS DOUBLE) / 3; -- 3.333...

相关文档