页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 14 下一个 »

(本文档仅供参考)

问题说明

数据集中的SQL语句在数据库工具中是正常执行的,但是在smartbi中却报“表达式解析错误:expecting STRING_LITERAL, found '['at line:1 column:399”... 

解决方案

1、通常是由于SQL语句里面有特殊字符导致,需要将特殊字符进行转义,比如select char(47) as a的代表字符“\”,其他特殊字符的转义方式可从网络上获取。

2、sql中由于一些特殊符号,比如\,在SQL查询中应该是不支持直接写的。需要通过获取ACSII的方式实现,比如向上尖括号的SQL是这样子的:

select concat('[',cast(char(94) as CHAR(20)),'->]') as aa from  categories  limit 1

3、多个特殊字符需要进行拼接,如oracle可以使用||拼接,mysql可以使用concat函数拼接
Oracle:select to_number(regexp_substr('20180721',chr(91)||'0-9'||chr(93)||'*'||chr(91)||'0-9'||chr(93),1)) from dual
mysql:select cast(concat('a',char(92)) as char) from dual


常见特殊字符转义参考

1、oracle、PostgreSQL

[:chr(91)

\:chr(92)

]:chr(93)

^:chr(94)

2、mysql、sqlserver

[:char(91)

\:char(92)

]:char(93)

^:char(94)

部分数据库示例参考

Oracle转义示例

select chr(92)||'1XXXX' from dual;
--正则表达式转义
select chr(94)||chr(92)||'d{10}$' from dual
select chr(91)||'0-9'||chr(93)||'*'||chr(91)||'0-9'||chr(93) as a from dual

select to_number(regexp_substr('20180721',chr(91)||'0-9'||chr(93)||'*'||chr(91)||'0-9'||chr(93),1)) from dual;


SELECT REPLACE(CHR(10),'\n') FROM dual
SELECT REPLACE(CHR(10),concat(chr(92),'n'))  as  a  FROM dual

postgresql转义拼接示例

select cast(concat(char(91),'123',char(93),'hao',char(58))as char) as a

select concat('a','123','hao') as a

select substring('[123]hao:','^\[.+\](.+):');
select substring('[123]hao:',chr(94) || E'\\[.+\\](.+):');


  • 无标签