我正在嘗試在這種情況下對 Oracle DB 進行選擇,但它不起作用。
LocalDateTime endDate = null;
表 POST
ID NUMBER
DATE_END TIMESTAMP(6)
select p.id from post p where (:endDate is null or p.date_end < :endDate);
但是什么時候endDate為空我得到了錯誤
ORA-00932 inconsistent datatypes expected TIMESTAMP got NUMBER.
請幫忙
uj5u.com熱心網友回復:
嘗試
select p.id
from post p
where (to_date(:endDate, 'dd/mm/yyyy') is null
or p.date_end < to_date(:endDate, 'dd/mm/yyyy'));
uj5u.com熱心網友回復:
示例設定
create table test (
DATE_END TIMESTAMP);
insert into test values (timestamp '2009-12-26 22:22:22.123456');
insert into test values (timestamp '2009-12-26 22:22:22.123458');
此查詢模擬您的例外
select * from test where DATE_END > 1;
ORA-00932: inconsistent datatypes: expected TIMESTAMP got NUMBER
所以你很可能set對系結變數使用了一些不正確的方法。
無論如何都setTimestamp可以與 JDBC 驅動程式一起12.1.0.2.0使用18 XE
def stmt = con.prepareStatement("select DATE_END from test where ? is null or DATE_END > ?")
stmt.setTimestamp(1,null)
stmt.setTimestamp(2,null)
def rs = stmt.executeQuery()
while(rs.next())
{
println "ts= ${rs.getTimestamp(1)}"
}
回傳兩行
ts= 2009-12-26 22:22:22.123456
ts= 2009-12-26 22:22:22.123458
雖然你傳遞了一個真實的時間戳,但你得到的結果有限
def ts = java.sql.Timestamp.valueOf('2009-12-26 22:22:22.123457')
def stmt = con.prepareStatement("select DATE_END from test where ? is null or DATE_END > ?")
stmt.setTimestamp(1,ts)
stmt.setTimestamp(2,ts)
...
ts= 2009-12-26 22:22:22.123458
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349950.html
上一篇:運算式樹的用例是什么?
下一篇:外部條件下的SQL-Update
