Oracle转PostgreSQL:SQL语句中to_number函数报错求正确语法
Oracle转PostgreSQL的正确SQL写法
原Oracle语句中,to_number可仅传入文本参数,但PostgreSQL的to_number函数必须指定格式模板,这是你报错的核心原因。
针对你的需求,提供两种可行的PostgreSQL写法:
方法1:使用to_number并指定格式模板
SELECT MAX(to_number(ltrim(aefo_number, 'VE'), '999999999')) FROM exemption WHERE aefo_number LIKE 'E%' OR aefo_number LIKE 'V%';
格式模板'999999999'适配最多9位数字的场景,可根据实际数据的数字长度调整位数。
方法2:使用强制类型转换(更简洁)
若能确定ltrim(aefo_number, 'VE')的结果是纯数字字符串,可直接用PostgreSQL的强制类型转换语法:
SELECT MAX(ltrim(aefo_number, 'VE')::numeric) FROM exemption WHERE aefo_number LIKE 'E%' OR aefo_number LIKE 'V%';
额外处理建议
如果存在aefo_number仅为'E'或'V'的情况,ltrim后会得到空字符串,此时需用NULLIF避免转换错误:
SELECT MAX(NULLIF(ltrim(aefo_number, 'VE'), '')::numeric) FROM exemption WHERE aefo_number LIKE 'E%' OR aefo_number LIKE 'V%';
内容的提问来源于stack exchange,提问作者Harish
相关产品推荐
相关产品推荐

