PostgreSQL:拆分列中的数字与字母
PostgreSQL拆分数字与字母列的方法
针对你提供的Duration列数据(示例:90 Min),可以用以下几种方法拆分数字和字母部分:
方法1:正则表达式替换
提取数字部分
SELECT regexp_replace(Duration, '[^0-9]', '', 'g')::int AS duration_num FROM your_table;
regexp_replace会移除所有非数字字符,最后用::int将结果转为整数类型,按需也可改用::numeric。
提取文本部分
SELECT trim(regexp_replace(Duration, '[0-9]', '', 'g')) AS duration_unit FROM your_table;
先移除所有数字,再用trim()去掉文本前的空格,得到干净的单位文本。
方法2:固定格式拆分(高效)
如果数据格式统一为「数字+空格+文本」,直接按空格拆分更高效:
SELECT split_part(Duration, ' ', 1)::int AS duration_num, split_part(Duration, ' ', 2) AS duration_unit FROM your_table;
split_part按指定分隔符拆分字符串,取对应位置的内容即可。
方法3:正则匹配截取
提取开头连续数字
SELECT substring(Duration FROM '^\d+')::int AS duration_num FROM your_table;
^\d+匹配字符串开头的连续数字,精准提取数值部分。
提取字母文本
SELECT substring(Duration FROM '[A-Za-z]+') AS duration_unit FROM your_table;
[A-Za-z]+匹配连续的字母字符,自动忽略前面的数字和空格。
内容的提问来源于stack exchange,提问作者MusA1234
相关产品推荐
相关产品推荐

