postgresql | sql运用

发布时间 2023-12-27 15:36:07作者: 槑孒

需求

postgresql这么一个字段a,字段类似是字符串,字段值如'{1,3,1}',null, '{2}',现在需求是新增一列b,类型为int,提取字段a的值,如'{1,3,1}',提取括号的第一个值,如null则返回null,用sql语句完成

解决

假设你的字段 a 的类型为字符串,包含类似 {1,3,1}, null, {2} 这样的值,可以通过以下 SQL 语句新增一列 b,并提取 a 字段中括号中的第一个值:

-- 添加新列 b
ALTER TABLE your_table ADD COLUMN b INTEGER;

-- 更新新列 b 的值
UPDATE your_table
SET b = CASE
         WHEN a IS NULL THEN NULL
         ELSE CAST(SUBSTRING(a FROM '[0-9]+' ) AS INTEGER)
       END;

your_table 为实际的表名。

这里使用了 SUBSTRING 函数来提取字符串中的数字部分,然后通过 CAST 将其转换为整数。CASE 语句用于处理 a 字段为 null 的情况,将 b 字段也设为 null

这个 SQL 语句假设括号内只包含整数值,如果实际情况中可能有其他类型,需要根据实际情况进行调整。