Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在HQL/Grails中将年月转换为日期?_Oracle_Grails_Hql - Fatal编程技术网

Oracle 如何在HQL/Grails中将年月转换为日期?

Oracle 如何在HQL/Grails中将年月转换为日期?,oracle,grails,hql,Oracle,Grails,Hql,此查询正在数据库中运行 select to_date(a.year || a.month, 'YYYYMM') as dates from table a 但不能像HQL那样在Grails中工作。将错误指定为“意外标记”。 如何在HQL/Grails中使用此查询 例如,我有月和年列。我需要在新列中将其显示为date 上面的to_date(a.year | | a.month,'yyyyymm')作为日期在oracle数据库中运行良好,但在grails中的HQL中不起作用,我将其用作 execu

此查询正在数据库中运行

select to_date(a.year || a.month, 'YYYYMM') as dates from table a
但不能像HQL那样在Grails中工作。将错误指定为“意外标记”。 如何在HQL/Grails中使用此查询

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

上面的
to_date(a.year | | a.month,'yyyyymm')作为日期在oracle数据库中运行良好,但在grails中的HQL中不起作用,我将其用作


executeQuery(“选择to_date(a.year | a.month,'yyyyymm')作为表a中的日期”)
但此项不起作用

只有在对数据库表进行建模后,HQL才有效。如果确实要使用此精确查询,请使用本机SQL而不是HQL:

MyController {

    Sql groovySql // package: groovy.sql

    def myAction() {

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

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

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

或者有一个临时字段为你做这件事,这完全取决于你的用例

谷歌的第一个链接…我在db中有两列作为月份和年份,我需要转换为日期。这个链接对我来说没有解决方案。不管怎样,如果你没有能力给出答案,那么为什么你要用否定的concat字符串:concat(a.year,a.month)而不是a.year | a.month。为什么是否定的?您没有提供日志、版本等。我使用Grails3和Oracle11g作为数据库。我已经编辑了答案来澄清。非常感谢。但本机SQL也无法从月份和年份中生成日期。我需要使用该数据通过变量查看页面。您的意思是,根据从数据库获得的结果,您需要
render()
一个视图?请用您的grails版本更新介绍文章,并确切说明您在这里要做什么将HQL更改为SQL,此查询将运行,您将得到结果。在注入的Sql服务上使用
rows()
,而不是
executeQuery()
,就像我发布的代码示例一样,它将执行本机Sql查询而不是HQL。