pgsql中set里面用case
时间: 2024-04-27 14:21:53 浏览: 62
在 PostgreSQL 中,可以在 SET 子句中使用 CASE 表达式来根据条件设置列的值。
例如,假设我们有一个名为 users 的表,其中包含 id、name 和 age 列。我们想要根据年龄设置每个用户的状态,如果年龄小于 18 岁,则状态为 "未成年",否则状态为 "成年"。可以使用以下语句:
```
UPDATE users
SET status = CASE
WHEN age < 18 THEN '未成年'
ELSE '成年'
END;
```
这个语句中,我们使用 CASE 表达式根据 age 列的值设置 status 列的值。如果 age 小于 18,则设置为 "未成年",否则设置为 "成年"。注意,CASE 表达式需要以 END 结尾。
如果我们想要根据其他列的值设置 status 列的值,可以在 WHEN 子句中添加其他条件,并在 ELSE 子句中指定默认值。例如,如果我们想要根据 name 列的值设置 status 列的值,可以使用以下语句:
```
UPDATE users
SET status = CASE
WHEN name LIKE '张%' THEN '张家人'
WHEN name LIKE '李%' THEN '李家人'
ELSE '其他'
END;
```
这个语句中,我们使用 CASE 表达式根据 name 列的值设置 status 列的值。如果 name 以 "张" 开头,则设置为 "张家人",如果 name 以 "李" 开头,则设置为 "李家人",否则设置为 "其他"。
相关问题
pgsql更新json格式
在PostgreSQL中,JSON数据类型可以很方便地进行更新。如果你想更新JSON对象中的某个字段,你可以使用`jsonb_set()`或`jsonb_update()`函数。
1. `jsonb_set()`函数:如果你想要添加、替换或删除一个键值对,可以用这个函数。例如,假设你有一个名为`my_table`的表,其中有一个`data`列是JSONB类型:
```sql
UPDATE my_table
SET data = jsonb_set(data, '{"key_to_update", "new_value"}', 'new_json_value');
```
这会将`data`中的`"key_to_update"`替换为`"new_value"`,如果该键不存在则新增。
2. `jsonb_update()`函数:如果想基于匹配的条件更新JSON,可以使用`->>`操作符配合`CASE`表达式:
```sql
UPDATE my_table
SET data = data->>'old_key' || CASE WHEN data ? 'new_key' THEN ',' || to_jsonb('new_key': 'new_value') ELSE '' END;
```
这里先检查旧键是否存在,然后更新或追加新键。
记得处理好并发控制,特别是在大量数据更新时,可能需要考虑行级锁定或事务。
pgsql里的if用法
在PostgreSQL(简称PGSQL)中,`IF`是一个用于条件判断的逻辑运算符,类似于其他数据库系统中的`CASE`或`WHEN-THEN`语句。它的基本语法如下:
```sql
IF condition THEN
-- 如果条件为真,执行这里的命令
result_column := some_expression;
-- 或者可能是一条或多条SQL语句
ELSE
-- 如果条件为假,执行这里的命令
result_column := some_other_expression;
END IF;
```
你可以使用`IF`来根据某个表达式的值来决定是否执行特定的SQL操作。例如,检查某个字段是否为空:
```sql
IF column IS NULL THEN
SELECT 'Column is null';
ELSE
SELECT 'Column is not null';
END IF;
```
或者根据条件更新记录:
```sql
BEGIN;
IF condition THEN
UPDATE table SET column = new_value WHERE some_condition;
END IF;
COMMIT;
```
阅读全文