【发布时间】:2017-11-10 11:34:26
【问题描述】:
考虑,对于 id id 的某些特定数据库条目,数据库中的日期间隔,从 BEGIN_DATE 到 END_DATE,用 (BEGIN_DATE,END_DATE) 表示。
给定两个形成间隔的新日期(newBeginDate,newEndDate),我必须更新(BEGIN_DATE,END_DATE),以便生成的间隔包含所有 4 个日期。换句话说,我想添加两个区间(由于我正在添加它们,因此生成的区间可能保持不变或增长,但永远不会缩小)。
几个例子:
如果 (BEGIN_DATE,END_DATE) = (January 10,January 20),那么:
(
BEGIN_DATE,END_DATE) + (Jan 15,Jan 25) = (Jan 10,Jan 25)(
BEGIN_DATE,END_DATE) + (Jan 05,Jan 15) = (Jan 05,Jan 20)(
BEGIN_DATE,END_DATE) + (Jan 05,Jan 25) = (Jan 05,Jan 25)(
BEGIN_DATE,END_DATE) + (Jan 15,Jan 15) = (Jan 10,Jan 20)(
BEGIN_DATE,END_DATE) + (Jan 10,Jan 13) = (Jan 10,Jan 20)
以下两个查询共同实现了这一目标。第一个更新BEGIN_DATE,第二个更新END_DATE:
session.createQuery(
"update APPOINTMENTS " +
"set BEGIN_DATE = :newBeginDate " +
"where " +
"(BEGIN_DATE is null or BEGIN_DATE > :newBeginDate) " +
"and ID = :id ")
.setParameter("newBeginDate", newBeginDate)
.setParameter("id", id)
.executeUpdate();
session.createQuery(
"update APPOINTMENTS " +
"set END_DATE = :newEndDate " +
"where " +
"(END_DATE is null or END_DATE < :newEndDate) " +
"and ID = :id ")
.setParameter("newEndDate", newEndDate)
.setParameter("id", id)
.executeUpdate();
我的问题是: 如何在单个查询中完成?
【问题讨论】:
-
您使用的是哪个 DBMS?后格雷斯?甲骨文? DB2?火鸟?
-
@a_horse_with_no_name MySQL 和 SqlServer,但这太基本了,我想没关系。
-
你为什么要使用两个语句呢?您可以在单个
UPDATE中完成它您的“增长,而不是收缩”到底是什么意思?请edit您的问题并添加一些示例数据和基于该数据的预期输出。 Formatted text 请no screen shots。不要在 cmets 中发布代码或附加信息 -
@a_horse_with_no_name 我不知道如何在一次更新中做到这一点,这正是我的问题。
-
完成,马先生。
标签: mysql sql sql-server hibernate hql