页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

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

解决方案

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

...

1、通常是由于SQL语句里面有特殊字符导致,大部分报错的是SQL中包含“^”,由于"^"在smartbi的SQL编辑器中是有标记对象(如参数、表、用户属性等)的特殊作用,因此不支持SQL语句中直接写^,这类特殊字符需要进行转义。

(1)MySQL库中,char(47) 代表字符“/”,char(94)代表字符"^"(向上尖括号),特殊字符的数值通过获取ACSII码数值实现,在MySQL的SQL语句中遇到特殊字符"^"需要拼接,可以使用concat函数拼接,参考如下:

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


3、多个特殊字符需要进行拼接,如oracle可以使用(2)Oracles库遇到特殊字符需要拼接,可以在字符之间使用“||拼接,mysql可以使用concat函数拼接
Oracle:select 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(


2、如果sql字符串中有“\”,需要在“\”前加一个“\”对其进行转义处理,特别需要注意的是,如果是正则表达式的“\”,部分数据库需要进一步处理,用4个“\”去转义1个“\”:
select replace('AA\\BBBBCCCC','AA\\\\', 'a',char(92) ) as char) a from dual

常见特殊字符转义参考

1、oracle、PostgreSQL1、Oracle、PostgreSQL

[:chr(91)

\:chr(92)

]:chr(93)

^:chr(94)

2、mysql、sqlserver2、MySQL、SqlServer

[:char(91)

\:char(92)

]:char(93)

^:char(94)

部分数据库示例参考

Oracle转义示例

代码块
linenumberstrue
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转义拼接示例

...

linenumberstrue

...

3、clickhouse

\n:char(10)