Postgresql varchar to int

时间:2013-10-07 08:18:14

标签: postgresql

我在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

任何帮助将不胜感激

2 个答案:

答案 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