如何编写一个同时适用于 HSQLDB 和 MySQL 的查询以在 WHERE 子句中为日期添加天数?

Posted

技术标签:

【中文标题】如何编写一个同时适用于 HSQLDB 和 MySQL 的查询以在 WHERE 子句中为日期添加天数?【英文标题】:How do I write a query that works in both HSQLDB and MySQL to add days to a date in the WHERE clause? 【发布时间】:2014-07-17 19:51:45 【问题描述】:

我想在日期列中添加特定天数,然后将其与当前日期进行比较。有什么方法可以实现与 HSQLDB(用于测试)和 mysql(生产)兼容的方法?

为了让事情变得更复杂,我正在使用 Hibernate。

【问题讨论】:

mysql:WHERE somefield + INTERVAL 42 day > curdate()。至于在两者中都有效的查询,请怀疑它。 sql 可能是一种“标准”语言,但它基本上是英国的 sql vs.美国 sql 对决澳大利亚的sql。大量的方言都略有不同。 不幸的是,interval 语法似乎在 hibernate 中不起作用,这很糟糕。 HSQLDB: WHERE somefield + INTERVAL 42 day > curdate() 和 curdate() 的几种替代方法都有效。 弗雷德:是的。解决方案就是不使用休眠。 Hibernate 不支持间隔。 【参考方案1】:

不知道你的问题的背景,但你可以反过来做:比较 dae 列与当前日期减去天数?

我在 hql 中的意思是这样的(如果您更喜欢 JPA 接口,我在此示例中使用 jpql):

TypedQuery<SomeClass> q = getEntityManager().crateQuery(
    "select s from SomeClass s where s.date = :date", SomeClass.class);
Calendar now = Calendar.getInstance();
// subtract number of days from current date, e.g. 10 days
now.add(Calendar.DAY, -10);
q.setParameter("date", now);
List<SomeClass> = q.getResultList();

这种方法与数据库无关,但当然只适用于琐碎的情况,在一些更复杂的情况下则行不通。

【讨论】:

问题是从日期减去或添加的函数在 hsql 中的操作与 mysql 不同。间隔语法在 hsql 和 mysql 中都有效,但在 hql(休眠查询语言)中不起作用。我的解决方案是用常规 SQL 编写所有查询。重写它们只是轻微的痛苦,但它奏效了。

以上是关于如何编写一个同时适用于 HSQLDB 和 MySQL 的查询以在 WHERE 子句中为日期添加天数?的主要内容,如果未能解决你的问题,请参考以下文章

webpack 构建同时适用于手机和电脑的调试服务器

如何构建跨平台应用程序

如何以二进制形式编写 hsqldb?

如何在同一行中编写两个方法[重复]

一,Serializer和ModelSerializer

原子设计:如何设计组件体系