Vim*_*deo 4 java string hibernate casting hql
我需要获得超过2015年1月1日的所有日期记录.此查询不起作用,因为nt.valeur是dataType varchar(255).我无法更改实体NotifTypeActionChampAddValVO的结构.数据库服务器位于db2版本9.7上.
这是hql:
select nt.valeur from NotifTypeActionChampAddValVO nt where nt.valide = 1 and nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123 and cast(nt.valeur as date) = '01/01/2015')
Run Code Online (Sandbox Code Playgroud)
我尝试通过强制转换(nt.valeur作为日期),但它会生成异常.
这是例外
DIAVERUM 2015-01-23 13:23:21,859 [http-8081-7] ERROR org.hibernate.util.JDBCExceptionReporter - DB2 SQL Error: SQLCODE=-461, SQLSTATE=42846, SQLERRMC=SYSIBM.LONG VARCHAR;SYSIBM.DATE, DRIVER=3.63.75
DIAVERUM 2015-01-23 13:23:21,859 [http-8081-7] ERROR org.hibernate.util.JDBCExceptionReporter - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-461;42846;SYSIBM.LONG VARCHAR|SYSIBM.DATE, DRIVER=3.63.75
Run Code Online (Sandbox Code Playgroud)
如何转换列该字符串列可以作为hql中的日期进行比较的方式是什么?
您可以使用db2 to_date函数将不同的字符串格式转换为日期.例如
date(to_date(column,'DD-MM-YYYY HH:MI:SS'))
Run Code Online (Sandbox Code Playgroud)
所以你可以查询(取决于列上使用的格式nt.valeur)
select nt.valeur from NotifTypeActionChampAddValVO nt where nt.valide = 1 and nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123 and date(to_date(nt.valeur,'DD-MM-YYYY HH:MI:SS')) = '01/01/2015')
Run Code Online (Sandbox Code Playgroud)
请参阅:TO_DATE标量函数
to_date实际上是TIMESTAMP_FORMAT函数的别名,其中格式字符串的格式记录得更好.
| 归档时间: |
|
| 查看次数: |
13173 次 |
| 最近记录: |