我有一个大型查询,在正常的postgres中工作得很好,但是当我在JPA本机查询中运行时,我得到以下错误:
org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"
查询包含以下行:
...
WHERE year = extract( year FROM CURRENT_DATE - '2 month'::interval)::int
and month = extract( month FROM CURRENT_DATE - '2 month'::interval)::int
...
我尝试通过在每个撇号前添加来进行转义,但代码无法编译:
error: illegal escape character
" WHERE year = extract( year FROM CURRENT_DATE - '2 month'::interval)::int and month = extract( month FROM CURRENT_DATE - '2 month'::interval)::int n" +
不能在本机查询中使用::吗?同样,当正常运行时,这也可以很好地工作。
您可以完全避免计算必要的转义序列的头痛。Postgres使用双冒号(::)作为专有的CAST操作,但支持SQL标准。此外,与其将字符串'2 month'
强制转换为间隔,不如通过在中添加前缀来声明它。你的子句变成:
where year = cast (extract( year FROM CURRENT_DATE - interval '2 month') as integer)
and month = cast (extract( month FROM CURRENT_DATE - interval '2 month') as integer)
不需要转义。并且使它更容易阅读(即理解)。