算术运算符
算术运算符包括双目运算与单目运算,这些运算符都将返回数字类型。
| 运算符 | 返回类型 | 描述 |
|---|---|---|
| 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...