【问题标题】:How to convert Month-Year to date in HQL/Grails?如何在 HQL/Grails 中将月-年转换为日期?
【发布时间】:2019-01-13 01:37:40
【问题描述】:

这个查询正在数据库中工作

select to_date(a.year || a.month, 'YYYYMM') as dates from table a

但不能在 Grails 中作为 HQL 工作。将错误作为“意外令牌”给出。 如何在 HQL/Grails 中使用此查询?

例如,我有 monthyear 列。我需要在新列中将此显示为date

to_date(a.year || a.month, 'YYYYMM') as dates 以上在 oracle 数据库中工作正常,但在我使用 as 的 grails 中的 HQL 中不起作用

executeQuery("select to_date(a.year || a.month, 'YYYYMM') as dates from table a") 但这个不工作

【问题讨论】:

  • stackoverflow.com/questions/12973700/… google 中的第一个链接...
  • 我在 db 中有 2 列作为月份和年份,我需要将其转换为日期。这个链接对我没有解决方案。无论如何,如果您没有能力给出答案,那么为什么您给出否定的答案
  • 连接字符串需要使用:concat(a.year, a.month) 而不是a.year ||一个月。为什么是负面的?您没有提供日志、版本等。
  • 我使用 Grails 3 和 Oracle 11g 作为数据库。我已经编辑了答案以澄清。

标签: oracle grails hql


【解决方案1】:

HQL 仅在您为数据库表建模时才有效。如果您真的想使用这个精确查询,请使用原生 SQL 而不是 HQL:

MyController {

    Sql groovySql // package: groovy.sql

    def myAction() {

        def results = groovySql.rows("SELECT 'thisIsNativeSqlQuery'");
        // do something with your results;

    }
}

如果您已经对该表进行了建模(具有 Domain 类),您可以使用 YourDomain.list() 获取它们并创建一个 getter 方法,根据您的格式形成您的日期:

Date toDate() {
​    return Date.parse("yyyyMM", "201808")​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
}

或有临时字段为您执行此操作,这完全取决于您的用例

【讨论】:

  • 非常感谢。但是本机 SQL 也无法确定月份和年份的日期。我需要使用该数据通过变量查看页面。
  • 您的意思是,您需要render() 一个视图,具体取决于您从数据库中获得的结果?请使用您的 grails 版本以及您在此处尝试做什么来更新介绍帖子
  • 将 HQL 更改为 SQL,此查询将运行,您将获得结果。而不是executeQuery() 在注入的Sql 服务上使用rows(),就像在我发布的代码示例中一样,它将执行本机sql 查询而不是HQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
相关资源
最近更新 更多