使用标量函数编写SQL查询时遇ORA-00906错误求助
Oracle SQL查询错误修复方案
你的SQL报错是因为混用了其他数据库(如SQL Server)的函数,Oracle有自己的语法规范,以下是问题点和修正后的代码:
问题分析
- Oracle没有
len()函数,获取字符串长度要用length() - Oracle的
concat()仅支持两个参数,多参数拼接建议用||运算符更直观 - 字符串截取函数是
substr(),而非substring() - 获取字符串后N位用
substr(字段名, -N),无需right()函数 - 类型转换时,Oracle的字符串类型为
varchar2,不是varchar
修正后的SQL语句
方式一:使用||拼接(推荐,可读性更高)
select name, substr(name, 1, 2) || length(name) || substr(phno, -3) as USER_PASSWORD from users order by name desc;
方式二:嵌套concat()函数
select name, concat(concat(substr(name, 1, 2), length(name)), substr(phno, -3)) as USER_PASSWORD from users order by name desc;
说明:如果phno是数值类型,需要先转字符串,可修改为substr(to_char(phno), -3),避免截取时出现格式问题。
内容的提问来源于stack exchange,提问作者Arghadeep Dey
相关产品推荐
相关产品推荐

