PostgreSQL 运算符详解
在 PostgreSQL 中,运算符用于执行各种操作,如数学计算、比较、逻辑判断、字符串操作等。PostgreSQL 支持多种运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符、字符串运算符等。
1. 算术运算符
算术运算符用于执行基本的数学计算。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | SELECT 10 + 5; | 15 |
- | 减法 | SELECT 10 - 5; | 5 |
* | 乘法 | SELECT 10 * 5; | 50 |
/ | 除法 | SELECT 10 / 5; | 2 |
% | 取模 | SELECT 10 % 3; | 1 |
^ | 幂运算 | SELECT 2 ^ 3; | 8 |
|/ | 平方根 | SELECT |/ 9; | 3 |
||/ | 立方根 | SELECT ||/ 27; | 3 |
! | 阶乘 | SELECT 5!; | 120 |
@ | 绝对值 | SELECT @ -10; | 10 |
示例:
SELECT 15 % 4; -- 结果:3
SELECT 3 ^ 3; -- 结果:27
2. 比较运算符
比较运算符用于比较两个值,并返回 TRUE 或 FALSE。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
= | 等于 | SELECT 10 = 10; | TRUE |
<> 或 != | 不等于 | SELECT 10 <> 5; | TRUE |
< | 小于 | SELECT 10 < 5; | FALSE |
> | 大于 | SELECT 10 > 5; | TRUE |
<= | 小于等于 | SELECT 10 <= 10; | TRUE |
>= | 大于等于 | SELECT 10 >= 11; | FALSE |
示例:
SELECT * FROM employees WHERE salary > 5000;
3. 逻辑运算符
逻辑运算符用于组合多个条件。
| 运算符 | 描述 | 示例 |
|---|---|---|
AND | 逻辑与 | SELECT * FROM employees WHERE age > 30 AND salary > 6000; |
OR | 逻辑或 | SELECT * FROM employees WHERE age < 25 OR salary > 7000; |
NOT | 逻辑非 | SELECT * FROM employees WHERE NOT (department = 'IT'); |
示例:
SELECT * FROM employees WHERE age > 30 AND salary > 6000;
4. 位运算符
位运算符用于按位操作。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
& | 按位与 | SELECT 5 & 3; | 1 |
| | 按位或 | SELECT 5 | 3; | 7 |
# | 按位异或 | SELECT 5 # 3; | 6 |
~ | 按位取反 | SELECT ~5; | -6 |
<< | 左移 | SELECT 5 << 1; | 10 |
>> | 右移 | SELECT 5 >> 1; | 2 |
示例:
SELECT 10 & 6; -- 结果:2
SELECT 10 | 6; -- 结果:14
SELECT 5 << 2; -- 结果:20
5. 字符串运算符
字符串运算符用于处理字符串。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
|| | 连接字符串 | SELECT 'Hello' || ' World'; | Hello World |
LIKE | 模式匹配 | SELECT * FROM employees WHERE name LIKE 'A%'; | 匹配以 A 开头的名字 |
ILIKE | 大小写不敏感匹配 | SELECT * FROM employees WHERE name ILIKE 'a%'; | Alice 和 alice 都能匹配 |
SIMILAR TO | 正则匹配 | SELECT 'abcd' SIMILAR TO 'a_%d'; | TRUE |
~ | 正则表达式匹配 | SELECT 'hello' ~ '^h.*o$'; | TRUE |
!~ | 反向正则匹配 | SELECT 'hello' !~ '^h.*a$'; | TRUE |
示例:
SELECT 'PostgreSQL' || ' is awesome!';
6. NULL 相关运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
IS NULL | 判断是否为 NULL | SELECT * FROM employees WHERE salary IS NULL; |
IS NOT NULL | 判断是否不为 NULL | SELECT * FROM employees WHERE salary IS NOT NULL; |
COALESCE | 选择第一个非 NULL 值 | SELECT COALESCE(NULL, 'default', 'fallback'); |
NULLIF | 如果两个值相等,则返回 NULL,否则返回第一个值 | SELECT NULLIF(10, 10); |
示例:
SELECT COALESCE(NULL, 'Fallback Value'); -- 结果:Fallback Value
7. 数组运算符
PostgreSQL 支持数组运算符。
| 运算符 | 描述 | 示例 |
|---|---|---|
&& | 是否有重叠 | SELECT ARRAY[1,2,3] && ARRAY[3,4,5]; |
@> | 是否包含 | SELECT ARRAY[1,2,3,4] @> ARRAY[2,3]; |
<@ | 是否被包含 | SELECT ARRAY[2,3] <@ ARRAY[1,2,3,4]; |
示例:
SELECT ARRAY[1, 2, 3] @> ARRAY[2]; -- 结果:TRUE
8. JSON/JSONB 运算符
PostgreSQL 提供 JSON 相关的运算符。
| 运算符 | 描述 | 示例 |
|---|---|---|
-> | 提取 JSON 对象中的字段 | SELECT '{"name": "Alice"}'::json -> 'name'; |
->> | 提取 JSON 字段值为文本 | SELECT '{"name": "Alice"}'::json ->> 'name'; |
#> | 提取 JSON 路径 | SELECT '{"person": {"name": "Bob"}}'::json #> '{person, name}'; |
示例:
SELECT '{"name": "John", "age": 30}'::jsonb -> 'name'; -- 结果:"John"
总结
PostgreSQL 提供丰富的运算符,涵盖:
- 数学运算符 (
+,-,*,/,%) - 比较运算符 (
=,<>,<,>) - 逻辑运算符 (
AND,OR,NOT) - 位运算符 (
&,|,#) - 字符串运算符 (
||,LIKE,~) - NULL 处理 (
IS NULL,COALESCE) - 数组运算符 (
@>,<@) - JSON 运算符 (
->,->>)
PostgreSQL 运算符非常强大,可以满足各种查询需求。更多详细内容请关注其他相关文章!