我在类型的 Oracle 存储过程中有一个变量DATE
(来自用户界面)和另一个TIMESTAMP
类型的变量(数据库比用户在执行存储过程的代码中输入的内容更精确)。
我想做这样的事情:(伪代码)
select * from MYDATABASE where inputDate = extract(date from myDatabaseTimeStamp);
但是当我尝试这个时出现编译错误。知道什么是一个好的实际代码解决方案吗?
我在类型的 Oracle 存储过程中有一个变量DATE
(来自用户界面)和另一个TIMESTAMP
类型的变量(数据库比用户在执行存储过程的代码中输入的内容更精确)。
我想做这样的事情:(伪代码)
select * from MYDATABASE where inputDate = extract(date from myDatabaseTimeStamp);
但是当我尝试这个时出现编译错误。知道什么是一个好的实际代码解决方案吗?
假设来自用户界面的 DATE 可以包含除 00:00:00(午夜)之外的时间,并且您只想知道来自用户界面的 DATE 和 TIMESTAMP 是否在同一天(不是相同的小时或分钟或?),尝试这个:
注意1:因为“inputDate”是一个数据库列并且可以被索引,我们不想这样做,
TRUNC(inputDate)
因为那样索引将不会被使用。注意 2:在 SQL 语句之前执行CAST可以防止此 PL/SQL 编译警告:PLW-07204:从列类型转换可能导致次优查询计划......编辑:在 10.2 XE 上测试后,即使是“ myDatabaseDate + 1" 会导致警告,因此,虽然看起来为了取悦编译器做的太多了,但我添加了 "myDatabaseNextDay := myDatabaseDate + 1;"
您可以使用
trunc()
:或者,以您的示例为例:
请参阅SQLFiddle上的工作示例和文档。