【问题标题】:SQL query for day of week in Java EE - HSQLDB vs PostgresJava EE 中星期几的 SQL 查询 - HSQLDB 与 Postgres
【发布时间】:2017-06-27 06:39:14
【问题描述】:

我有 JavaEE 应用程序,主要的是使用 PostgreSQL 开发 docker, 测试正在使用 HSQLDB,

在查询中我想检查星期几(从收集的数据中排除周末)

在 Postgres 中,以下工作:

extract(dow from date) != 0 AND extract(dow from date) != 6

当使用 HSQLDB 时,这会导致:

内部异常:java.sql.SQLSyntaxErrorException:意外令牌:DOW

对于 HSQLDB,我需要使用:

DAYOFWEEK(date) != 1 AND DAYOFWEEK(date) != 7

但这当然不适用于 PostgreSQL:

原因:org.postgresql.util.PSQLException: ERROR: function dayofweek(date) 不存在

知道如何统一这个吗?

我想,在persistance.xml resources.xml 中为测试和应用程序设置相同的数据库类型?但我想知道是否有任何 SQL 函数可以同时用于两者,而无需重新编辑 xml 文件?

【问题讨论】:

  • 另一个很好的例子,说明为什么在不同的 DBMS 上运行测试而不是在生产环境上运行测试不是一个好主意。
  • 你能不能试试 JDBC 函数转义{fn DAYOFWEEK(date)}。从理论上讲,所有 JDBC 驱动程序都应该不转义到正确的数据库特定函数,但它们并不总是这样做。
  • 顺便说一句:该函数转义的范围应该是 1..7,其中 1 是星期日。
  • 如果您找到了解决方案,请添加答案并接受该答案。不要将解决方案放在问题中。

标签: sql postgresql jdbc hsqldb database-independent


【解决方案1】:

我刚刚验证了 Mark 使用 JDBC escapes 的建议,以下内容适用于 HSQLDB 和 Postgres:

{fn DAYOFWEEK(date)} <> 0 AND {fn DAYOFWEEK(date)} <> 6

【讨论】:

    【解决方案2】:

    已解决:

    我使用 JPQL NamedQuery(我使用的是 NativeQuery)和 LocalDates 列表的传递参数(包括周末 + 节假日),

    在查询中,在我输入的 WHERE 部分中:

    'myDay not in :listOfWeekendsAndHolidays'
    

    【讨论】:

      猜你喜欢
      • 2016-08-16
      • 2015-01-30
      • 2016-05-13
      • 2015-07-24
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多