方案是从OracleDB获取值,其中一个搜索输入是DateTime,格式为“07/11/2017 10:12:16 AM”(这是一个字符串)和DB列是TIMESTAMP。
列中的数据以“07/11/2017 10:12:16 AM”格式保存,但它是TIMESTAMP。
从Oracle DB查询时,可以使用 TO_TIMESTAMP 函数将搜索输入转换为适当的TIMESTAMP
实施例
select * from Table where SI_ID='12345'and COLUMN >= TO_TIMESTAMP ('07/11/2017 10:12:16 AM', 'mm/DD/YYYY HH:MI:SS AM'
;
我需要使用Spring Data JPA和NamedQuery在Java中实现相同的功能。 从JPA存储库调用NativeNamedQuery如下
@Query(name = "Sample.findRecordByIdAndTime", nativeQuery = true)
Sample findByIdAndTime (@Param("id") Long id, @Param("timestamp") String timestamp);
但是如何将字符串转换为从JPA存储库调用的Named查询中的TIMESTAMP,如下所示:
@NamedNativeQuery(name="Sample.findRecordByIdAndTime", query="select * from TABLE where SI_ID= ? and TS_COLUMN >= TO_TIMESTAMP(?, 'mm/DD/YYYY HH:MI:SS AM')", resultClass = Sample.class)
任何帮助将不胜感激。
答案 0 :(得分:1)
您的查询应该有效(因为它是原生查询),只需添加绑定参数::id
和:timestamp
@NamedNativeQuery(name="Sample.findRecordByIdAndTime",
query="select * from TABLE where SI_ID= :id
and TS_COLUMN >= TO_TIMESTAMP(:timestamp , 'mm/DD/YYYY HH:MI:SS AM')",
resultClass = Sample.class)