【问题标题】:how to get year from date in HQL for Oracle如何在 HQL for Oracle 中获取日期的年份
【发布时间】:2014-05-22 18:15:42
【问题描述】:
List employees = session.createQuery("FROM Employee where date1 between '04-APR-04 02.27.05.187000 AM' and '04-APR-14 02.27.05.187000 AM' and YEAR('04-APR-04 02.27.05.187000 AM')=YEAR('04-APR-04 02.27.05.187000 AM')").list();

我遇到了这个问题:

    Hibernate: select emThrployee0_.id as id2_, employee0_.firstName as firstName2_, employee0_.lastName as lastName2_, employee0_.date1 as date4_2_ from emp1 employee0_ where (employee0_.date1 between '04-APR-04 02.27.05.187000 AM' and '04-APR-14 02.27.05.187000 AM') and extract(year from '04-APR-04 02.27.05.187000 AM')=extract(year from '04-APR-04 02.27.05.187000 AM')
org.hibernate.exception.GenericJDBCException: could not execute query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:2214)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
    at org.hibernate.loader.Loader.list(Loader.java:2090)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:388)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at main.StoreData.listEmployees(StoreData.java:68)
    at main.StoreData.main(StoreData.java:57)
Caused by: java.sql.SQLException: ORA-30076: invalid extract field for extract source

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:799)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
    at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1133)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)
    at org.hibernate.loader.Loader.doQuery(Loader.java:662)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    at org.hibernate.loader.Loader.doList(Loader.java:2211)
    ... 9 more

我需要 Oracle 休眠中从日期开始的年份 但是这段代码在 Sql server 中工作但在 Oracle 中不工作。 我尝试了,但我无法解决如果知道请帮助任何人

谢谢

【问题讨论】:

    标签: sql sql-server oracle hibernate hql


    【解决方案1】:

    我会尝试阅读文档,因为您的查询应该采用这种结构:

    Select * FROM table t WHERE t.column...
    

    您可以尝试以下方法:

    "SELECT * FROM Employee e WHERE e.date1 > '2013-01-01' AND e.date1 <'2014-01-01'"
    

    这将从您的员工表中获取所有列,您可以尝试these 格式的日期。使用这些格式,您可以使用函数YEAR(date)

    【讨论】:

    • 年(日期)查询在 sql server 中工作。什么是 HQL 中 Oracle 的替代查询。
    • 它是 Hibernate 文档的一部分,而且您的日期格式错误。
    【解决方案2】:

    隐式转换在 Oracle 中不如在 SQL Server 中那么容易。查看将日期时间字符串填充到查询中的 TO_DATE() 函数中。

    http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm

    【讨论】:

    • 我得到 Ans:FROM Employee where date1 在 '2014-04-04 08:58:45.000' 和 '2014-04-14 08:58:45.000' 和 extract(year from date1)= to_char(to_timestamp('2014-04-10 08:58:45.000','yyyy-mm-rr hh:mi:ss.ff am'),'yyyy')
    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2021-09-19
    相关资源
    最近更新 更多