逻辑和位运算符

逻辑非 (!)

功能:对表达式进行逻辑非操作,即如果表达式为真(true),返回假(false);如果表达式为假(false),返回真(true)。

参数

  • expr
    expr
    :布尔类型表达式。

返回结果

  • 布尔类型值。

示例

SELECT !true; -- 返回 false SELECT !false; -- 返回 true SELECT !NULL; -- 返回 NULL

按位非 (~)

功能:对表达式进行按位非操作,即将每一位的0变成1,1变成0。

参数

  • expr
    expr
    :整数类型表达式。

返回结果

  • 与输入表达式相同类型的值。

示例

SELECT ~0; -- 返回 -1

不等于 (!=)

功能:比较两个表达式,如果它们不相等,返回真(true)。

参数

  • expr1
    expr1
    :布尔类型表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 1 != 0; -- 返回 true SELECT 10 != 10; -- 返回 false SELECT 10 != NULL; -- 返回 NULL

取模 (%)

功能:返回两个数值表达式相除的余数。

参数

  • expr1
    expr1
    :数值类型表达式,包括 float、double、decimal、tinyint、smallint、int、bigint。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入参数相同类型的值。

示例

SELECT 2 % 1.8; -- 返回 0.2 SELECT -10 % 3; -- 返回 -1

乘法 (*)

功能:返回两个数值表达式的乘积。

参数

  • expr1
    expr1
    :数值类型表达式,包括 float、double、decimal、tinyint、smallint、int、bigint。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入参数相同类型的值。

示例

SELECT 1.4 * 2.3; -- 返回 3.22

加法 (+)

功能:返回两个数值表达式的和。

参数

  • expr1
    expr1
    :数值类型表达式,包括 float、double、decimal、tinyint、smallint、int、bigint。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入参数相同类型的值。

示例

SELECT 1.4 + 2.3; -- 返回 3.7

正号 (+)

功能:返回表达式的值,不进行任何改变。

参数

  • expr
    expr
    :数值类型表达式。

返回结果

  • 与输入参数相同类型的值。

示例

SELECT +10; -- 返回 10 SELECT +(-10); -- 返回 -10

减法 (-)

功能:返回两个数值表达式的差。

参数

  • expr1
    expr1
    :数值类型表达式,包括 float、double、decimal、tinyint、smallint、int、bigint。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入参数相同类型的值。

示例

SELECT 3.3 - 10; -- 返回 -6.7

负号 (-)

功能:返回表达式的负值。

参数

  • expr
    expr
    :数值类型表达式。

返回结果

  • 与输入参数相同类型的值。

示例

SELECT -(-10); -- 返回 10 SELECT -(1.1); -- 返回 -1.1

除法 (/)

功能:返回两个数值表达式相除的商。

参数

  • expr1
    expr1
    :数值类型表达式,包括 float、double、decimal。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入参数相同类型的值。

示例

SELECT 3.3 / 1.5; -- 返回 2.2 SELECT 9L / 2L; -- 返回 4.5

整数除法 (DIV)

功能:返回两个数值表达式相除的整数部分。

参数

  • dividend
    dividend
    :被除数,数值类型表达式。
  • divisor
    divisor
    :除数,与被除数相同类型的表达式。

返回结果

  • 整数类型值。

示例

SELECT 10 DIV 3; -- 返回 3 SELECT 20 DIV 4; -- 返回 5 SELECT 7 DIV 2; -- 返回 3

小于 (<)

功能:比较两个表达式,如果第一个表达式小于第二个,返回真(true)。

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 1 < 2; -- 返回 true SELECT 10 < 10; -- 返回 false SELECT 'a' < 'b'; -- 返回 true

小于等于 (<=)

功能:比较两个表达式,如果第一个表达式小于或等于第二个,返回真(true)。

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 1 <= 2; -- 返回 true SELECT 10 <= 10; -- 返回 true SELECT 'a' <= 'b'; -- 返回 true

大于 (>)

功能:比较两个表达式,如果第一个表达式大于第二个,返回真(true)。

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 2 > 1; -- 返回 true SELECT 10 > 10; -- 返回 false SELECT 'b' > 'a'; -- 返回 true

大于等于 (>=)

功能:比较两个表达式,如果第一个表达式大于或等于第二个,返回真(true)。

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 2 >= 1; -- 返回 true SELECT 10 >= 10; -- 返回 true SELECT 'b' >= 'a'; -- 返回 true

等于 (=)

功能:比较两个表达式,如果它们相等,返回真(true)。

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 1 = 1; -- 返回 true SELECT 10 = 5; -- 返回 false SELECT 10 = NULL; -- 返回 NULL

等于 (==)

功能:比较两个表达式,如果它们相等,返回真(true)。功能与

=
=
相同。

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 1 == 1; -- 返回 true SELECT 10 == 5; -- 返回 false SELECT 10 == NULL; -- 返回 NULL

不等于 (<>)

功能:比较两个表达式,如果它们不相等,返回真(true)。功能与

!=
!=
相同。

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 1 <> 0; -- 返回 true SELECT 10 <> 10; -- 返回 false SELECT 10 <> NULL; -- 返回 NULL

NULL 安全等于 (<=>)

功能:比较两个表达式,与

=
=
类似,但对 NULL 值有特殊处理。如果两个值都是 NULL,返回真(true);如果其中一个是 NULL,返回假(false)。等价于 SQL 标准的
IS NOT DISTINCT FROM
IS NOT DISTINCT FROM

参数

  • expr1
    expr1
    :可比较类型的表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 布尔类型值。

示例

SELECT 1 <=> 1; -- 返回 true SELECT NULL <=> NULL; -- 返回 true SELECT 1 <=> NULL; -- 返回 false SELECT NULL <=> 1; -- 返回 false

逻辑与 (AND)

功能:对两个布尔表达式进行逻辑与操作。只有当两个表达式都为真(true)时,返回真(true)。

参数

  • expr1
    expr1
    :布尔类型表达式。
  • expr2
    expr2
    :布尔类型表达式。

返回结果

  • 布尔类型值。

示例

SELECT true AND true; -- 返回 true SELECT true AND false; -- 返回 false SELECT false AND false; -- 返回 false SELECT true AND NULL; -- 返回 NULL

逻辑或 (OR)

功能:对两个布尔表达式进行逻辑或操作。只要有一个表达式为真(true),返回真(true)。

参数

  • expr1
    expr1
    :布尔类型表达式。
  • expr2
    expr2
    :布尔类型表达式。

返回结果

  • 布尔类型值。

示例

SELECT true OR false; -- 返回 true SELECT false OR false; -- 返回 false SELECT false OR NULL; -- 返回 NULL SELECT true OR NULL; -- 返回 true

逻辑非 (NOT)

功能:对布尔表达式进行逻辑非操作。与

!
!
运算符功能相同。

参数

  • expr
    expr
    :布尔类型表达式。

返回结果

  • 布尔类型值。

示例

SELECT NOT true; -- 返回 false SELECT NOT false; -- 返回 true SELECT NOT NULL; -- 返回 NULL

按位与 (&)

功能:对两个整数表达式进行按位与操作。

参数

  • expr1
    expr1
    :整数类型表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入表达式相同类型的值。

示例

SELECT 12 & 10; -- 返回 8 (二进制: 1100 & 1010 = 1000) SELECT 7 & 3; -- 返回 3 (二进制: 0111 & 0011 = 0011)

按位或 (|)

功能:对两个整数表达式进行按位或操作。

参数

  • expr1
    expr1
    :整数类型表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入表达式相同类型的值。

示例

SELECT 12 | 10; -- 返回 14 (二进制: 1100 | 1010 = 1110) SELECT 7 | 3; -- 返回 7 (二进制: 0111 | 0011 = 0111)

按位异或 ()

功能:对两个整数表达式进行按位异或操作。

参数

  • expr1
    expr1
    :整数类型表达式。
  • expr2
    expr2
    :与
    expr1
    expr1
    相同类型的表达式。

返回结果

  • 与输入表达式相同类型的值。

示例

SELECT 12 10; -- 返回 6 (二进制: 1100 1010 = 0110) SELECT 7 3; -- 返回 4 (二进制: 0111 0011 = 0100)

字符串连接 (||)

功能:连接两个字符串表达式。

参数

  • expr1
    expr1
    :字符串类型表达式。
  • expr2
    expr2
    :字符串类型表达式。

返回结果

  • 字符串类型值。

示例

SELECT 'Hello' || ' ' || 'World'; -- 返回 'Hello World' SELECT 'abc' || 'def'; -- 返回 'abcdef' SELECT 'value: ' || 123; -- 返回 'value: 123'

类型转换 (::)

功能:将表达式转换为指定的数据类型。这是 PostgreSQL 风格的类型转换语法,等价于

CAST(expr AS type)
CAST(expr AS type)
。支持链式转换。

语法

expr::type expr::type1::type2 -- 链式转换

示例

SELECT '123'::int; -- 返回 123 SELECT 3.14::int; -- 返回 3 SELECT '2024-01-01'::date; -- 返回 2024-01-01 SELECT '123'::int::string; -- 链式转换,返回 '123'

IS [NOT] DISTINCT FROM

功能:NULL 安全的等值比较。与

=
=
不同,当两个值都是 NULL 时返回 true(而非 NULL),当一个值是 NULL 另一个不是时返回 false(而非 NULL)。
IS NOT DISTINCT FROM
IS NOT DISTINCT FROM
等价于
<=>
<=>

语法

expr1 IS DISTINCT FROM expr2 expr1 IS NOT DISTINCT FROM expr2

返回结果

  • 布尔类型值,永远不会返回 NULL。

示例

SELECT 1 IS DISTINCT FROM 1; -- 返回 false SELECT 1 IS DISTINCT FROM 2; -- 返回 true SELECT NULL IS DISTINCT FROM NULL; -- 返回 false SELECT 1 IS DISTINCT FROM NULL; -- 返回 true SELECT 1 IS NOT DISTINCT FROM 1; -- 返回 true SELECT NULL IS NOT DISTINCT FROM NULL; -- 返回 true

BETWEEN ... AND

功能:判断表达式的值是否在指定的范围内(包含边界值)。

语法

expr BETWEEN lower AND upper expr NOT BETWEEN lower AND upper

返回结果

  • 布尔类型值。
    expr BETWEEN lower AND upper
    expr BETWEEN lower AND upper
    等价于
    expr >= lower AND expr <= upper
    expr >= lower AND expr <= upper

示例

SELECT 5 BETWEEN 1 AND 10; -- 返回 true SELECT 15 NOT BETWEEN 1 AND 10; -- 返回 true SELECT date '2024-06-15' BETWEEN date '2024-01-01' AND date '2024-12-31'; -- 返回 true

LIKE ANY / LIKE SOME / LIKE ALL

功能:将表达式与多个模式进行 LIKE 匹配。

LIKE ANY
LIKE ANY
(或
LIKE SOME
LIKE SOME
)在任一模式匹配时返回 true;
LIKE ALL
LIKE ALL
在所有模式都匹配时返回 true。

语法

expr LIKE ANY (pattern1, pattern2, ...) expr LIKE SOME (pattern1, pattern2, ...) expr LIKE ALL (pattern1, pattern2, ...) expr NOT LIKE ANY (pattern1, pattern2, ...) expr NOT LIKE ALL (pattern1, pattern2, ...)

返回结果

  • 布尔类型值。

示例

SELECT 'hello' LIKE ANY ('%llo', '%world'); -- 返回 true SELECT 'hello' LIKE ALL ('h%', '%o'); -- 返回 true SELECT 'hello' LIKE ALL ('h%', '%x'); -- 返回 false SELECT 'hello' NOT LIKE ANY ('%x', '%y'); -- 返回 true

ILIKE

功能:不区分大小写的 LIKE 匹配。用法与 LIKE 完全相同,但匹配时忽略大小写。同样支持

ESCAPE
ESCAPE
子句和
ANY
ANY
/
ALL
ALL
形式。

语法

expr ILIKE pattern expr ILIKE pattern ESCAPE escape_char expr NOT ILIKE pattern expr ILIKE ANY (pattern1, pattern2, ...)

示例

SELECT 'Hello' ILIKE 'hello'; -- 返回 true SELECT 'Hello' ILIKE 'HELLO%'; -- 返回 true SELECT 'ABC' NOT ILIKE 'abc'; -- 返回 false

IS [NOT] TRUE / FALSE / UNKNOWN

功能:判断布尔表达式的值是否为 TRUE、FALSE 或 UNKNOWN(NULL)。与直接比较不同,这些谓词不会因为 NULL 而返回 NULL。

语法

expr IS TRUE expr IS NOT TRUE expr IS FALSE expr IS NOT FALSE expr IS UNKNOWN expr IS NOT UNKNOWN

返回结果

  • 布尔类型值,永远不会返回 NULL。

示例

SELECT true IS TRUE; -- 返回 true SELECT NULL IS TRUE; -- 返回 false SELECT NULL IS UNKNOWN; -- 返回 true SELECT false IS NOT FALSE; -- 返回 false SELECT NULL IS NOT UNKNOWN; -- 返回 false

RLIKE / REGEXP

功能:使用正则表达式匹配字符串。

RLIKE
RLIKE
REGEXP
REGEXP
是同义词。

语法

expr RLIKE pattern expr REGEXP pattern expr NOT RLIKE pattern expr NOT REGEXP pattern

返回结果

  • 布尔类型值。如果 expr 匹配正则表达式 pattern 则返回 true。

示例

SELECT 'hello123' RLIKE '[a-z]+[0-9]+'; -- 返回 true SELECT 'hello' REGEXP 'h.*o$'; -- 返回 true SELECT 'abc' NOT RLIKE '[0-9]+'; -- 返回 true

操作符优先级

下表列出了操作符和谓词的优先级,从高到低排列。同一行的操作符优先级相同,均为左结合(除非另有说明)。

优先级操作符 / 谓词结合性说明
1
.
.
字段访问(table.column、struct.field)
2
::
::
类型转换
3
[]
[]
数组/Map 下标
4
+
+
-
-
~
~
(一元)
正号、负号、按位非
5
*
*
/
/
%
%
DIV
DIV
乘法、除法、取模、整数除法
6
+
+
-
-
||
||
加法、减法、字符串连接
7
&
&
按位与
8``按位异或
9
|
|
按位或
10
=
=
<=>
<=>
!=
!=
<>
<>
<
<
<=
<=
>
>
>=
>=
比较运算符
11
BETWEEN
BETWEEN
IN
IN
LIKE
LIKE
ILIKE
ILIKE
RLIKE
RLIKE
REGEXP
REGEXP
范围、集合、模式匹配
12
IS NULL
IS NULL
IS TRUE
IS TRUE
IS FALSE
IS FALSE
IS DISTINCT FROM
IS DISTINCT FROM
IS 谓词
13
NOT
NOT
逻辑非
14
AND
AND
逻辑与
15
OR
OR
逻辑或

说明

  • 优先级数字越小,优先级越高。
  • 可以使用括号
    ()
    ()
    改变运算顺序。
  • NOT
    NOT
    可以作为
    BETWEEN
    BETWEEN
    IN
    IN
    LIKE
    LIKE
    等谓词的前缀修饰符(如
    NOT BETWEEN
    NOT BETWEEN
    ),此时它是谓词的一部分,不受逻辑非的优先级影响。

联系我们
预约咨询
微信咨询
电话咨询