1

我在 postgresql 中有一个衣服尺寸列,其中包含(24、25、“S”、“M”、“ONESIZE”、“XL”)等值。

我只需要从中提取整数值并将结果转换为 int。我尝试了以下格式的 to_number,如果该行包含一个数字,则该格式有效,但如果它仅包含字母,则该格式无效。

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

任何帮助,将不胜感激

4

2 回答 2

1

试试这个:

select COALESCE((select UNNEST(regexp_matches('XLds', '\d+')::integer[])), 0);

请注意,此正则表达式仅匹配字符串中的第一个数字。

于 2013-10-07T09:30:59.230 回答
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
于 2013-10-07T08:22:20.830 回答