【问题标题】:Compare Date from the database with current date using jpa使用 jpa 将数据库中的日期与当前日期进行比较
【发布时间】:2013-01-15 08:33:13
【问题描述】:

我使用 JPA 1 和 hibernate 作为提供者。我想将实体的日期与当前日期(无论时间如何)进行比较,并将该字段保存为时间戳(因为我需要它)。 当我通过以下代码使用 oracle 方言时,我得到了正确的结果:

select t from Task t where to_date(t.createdOn) = to_date(CURRENT_DATE)

但是当我切换到 sql server(2008) 时,它不起作用。我需要一种通用的方式,以便我可以使查询数据库独立。

【问题讨论】:

    标签: sql sql-server-2008 hibernate jpa hibernate-entitymanager


    【解决方案1】:

    这是您的 oracle 代码的精确模拟

    SELECT * FROM Task t
    WHERE CAST(t.createdOn as date) = cast(getdate() as date)
    

    但我建议使用这个:

    SELECT * FROM Task t
    WHERE t.createdOn >= cast(getdate() as date)
          AND t.createdOn < DATEADD(d, 1, cast(getdate() as date))
    

    编辑

    有关如何配置Hibernate 以使用SQL SERVER 2008 的详细信息,请参阅this

    【讨论】:

    • 但它将日期转换为日期时间数据类型,因此比较完整日期。我们只需要比较日期(我都试过了,两者都在比较完整的日期时间)。
    • 您是否浏览过与数据类型DATE 相关的sql server 文档? msdn.microsoft.com/en-us/library/bb630352.aspx
    • 我觉得理解的有点少。 Hibernate 正在生成datetime。如果我直接使用到 sql server 它正在工作。如果您能提供帮助,请再说一遍。
    • 我不使用Hibernate,但我假设您必须配置它以使用sql server 2008,因为DATE 是新的数据类型。
    • @Hardik 抱歉,我错过了使用 N Hibernate 的 Hibernate。
    猜你喜欢
    • 2019-06-02
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多