PostgreSQL中GREATEST与split_part组合使用不符合预期问题
问题原因及解决办法
- 核心问题是split_part提取的字符串带有前导空格:
split_part('abc | 1 | 5', '|', 3)返回的实际是' 5'(数字5前面有空格)。字符串比较是按ASCII码顺序进行的,空格的ASCII码(32)小于'0'的ASCII码(48),所以' 5'在字符串层面比'0'小,GREATEST函数自然返回'0'。 - 解决方式:给split_part的结果添加去空格处理,比如使用
trim()函数:
SELECT GREATEST(trim(split_part('abc | 1 | 5', '|', 3)), '0');
执行该查询就能得到预期的'5'。如果需要数值类型的结果,还可以进一步转换为整数:
SELECT GREATEST(trim(split_part('abc | 1 | 5', '|', 3))::int, 0);
内容的提问来源于stack exchange,提问作者raghav
相关产品推荐
相关产品推荐

