【问题标题】:How to query against month and day against Joda LocalDate in Grails如何在 Grails 中针对 Joda LocalDate 查询月份和日期
【发布时间】:2015-11-25 12:32:00
【问题描述】:

当持久数据类型为 Binary(255) 时,如何根据 Joda LocalDate 对象的月份和日期组件有效地执行查询。

我想要完成的是找到 dateOfBirth (LocalDate) 发生在今天日期 (LocalDate) 的“客户”。

Criteria 查询似乎不可能,并且回退到 HQL 与诸如

之类的查询作斗争
def startDate = LocalDate.now()

      def entries = Customer.executeQuery("SELECT c FROM Customer AS c " +
              "WHERE DAY(c.dateOfBirth) = DAY(:today) AND " +
              "MONTH(c.dateOfBirth) = MONTH(:today) ",[today:startDate])

因为 LocalDate 类型。

【问题讨论】:

    标签: hibernate grails jodatime


    【解决方案1】:

    使用sqlRestriction:

    def startDate = LocalDate.now()
    
    def entries = Customer.withCriteria{
       sqlRestriction 'DAY(dateOfBirth) = DAY(now()) AND MONTH(dateOfBirth) = MONTH(now())'
    }
    

    允许您将 SQL 与 Criteria 混合使用。 day()month()now() 函数应存在于您的数据库中,但您必须检查

    【讨论】:

    • 好主意,认为这可行,但仍有问题。无法解析 “DATE” 恒定 “aced0005737200176f72672e6a6f64612e74696d652e4c6f63616c44617465fffff804d3e4ebb50200024a000c694c6f63616c4d696c6c69734c000b694368726f6e6f6c6f677974001a4c6f72672f6a6f64612f74696d652f4368726f6e6f6c6f67793b78700000004d110ac400737200276f72672e6a6f64612e74696d652e6368726f6e6f2e49534f4368726f6e6f6c6f67792453747562a9c811667137502703000078707372001f6f72672e6a6f64612e74696d652e4461746554696d655a6f6e652453747562a62f019a7c321ae30300007870770500035554437878”; 跨度>
    • 我认为根本问题是 Joda 存储的 PersistantLocalDate 不是 SQL 时间戳,因此用于日期操作的 SQL 函数不再是有效选项...如果我可以从 Jodas 二进制形式转换为时间戳,那么我应该走在正确的道路上......
    • joda 日期字段的外观如何?
    • 在域中它是一个 LocalDate,在数据库(h2)中它保存在二进制文件中,看起来是 223 字节。我认为我无能为力,因为这是 Jodas 自己存储的格式。仅 SQL 将无法用它做任何事情。希望我在使用 LocalDates 之前就知道这一点。
    • 然后我会切换到普通日期,如有必要,提供 joda getter 和 setter。否则你可以忘记查询
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多