我在postgresql中有一个衣服大小列,其中包含(24,25,“S”,“M”,“ONESIZE”,“XL”)等值。
我需要从中提取整数值并将结果转换为int。 我尝试使用下面的格式编号,如果行包含数字,则可以工作,但如果只包含字母则不起作用。
select to_number('aq1', '99999D9') -> 1
select to_number('23', '99999D9') -> 23
select to_number('ONESIZE', '99999D9') -> error
我需要一个能够以一种允许我在varchar列上加入等于int列的方式工作的函数。
select ???func("XL") -> null/0
select ???func(23) -> 23
任何帮助将不胜感激
答案 0 :(得分:1)
试试这个:
select COALESCE((select UNNEST(regexp_matches('XLds', '\d+')::integer[])), 0);
请注意,此正则表达式仅匹配字符串中的第一个数字。
答案 1 :(得分:0)
我只是找到了一种方式,虽然看起来不是很整洁。也许有人知道原生功能?
select to_number(concat('ONESIZE',0), '99999D9')/10 -> 0
select to_number(concat('23',0), '99999D9')/10 -> 23
根据cathulhu的建议,与领先0结束以避免分裂
select to_number(concat(0,'23'), '99999D9') -> 23