sql - Oracle SQL 查询中的条件 where 子句不起作用
问题描述
我正在尝试在这种情况下在 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.
请帮忙
解决方案
样品设置
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
推荐阅读
- php - 数据表不适用于 php
- ios - didReceiveIncomingPushWith - 不工作 - iOS
- javascript - 未捕获的类型错误:无法读取 null 的属性“classList”| 但是当我 console.log 时指向元素
- workflow-foundation-4 - 适用于大规模应用程序的 Windows 工作流程
- xml - 解析 XML 时出错,第 744 行,第 97 列:引用了实体“u”,但未声明
- python-3.x - 从 Python Flask 应用程序连接到 Mongo 服务器
- java - 查找正整数数组是否形成闭合多边形
- python - 读取 pandas dataFrame 列中的日期作为基准日以生成每小时数据
- tfs - 在 tfs 2017 中构建 .net 解决方案提供了所需的 dll 参考帮助错误
- r - rvest 函数 html_nodes 返回 {xml_nodeset (0)}