需求
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 语句假设括号内只包含整数值,如果实际情况中可能有其他类型,需要根据实际情况进行调整。