按日期选择记录现在在oracle中

a5g8bdjr  于 2023-01-12  发布在  Oracle
关注(0)|答案(2)|浏览(151)

我有下表
| 项目|插入日期|
| - ------|- ------|
| A类|二十三年一月十一日|
| 乙|2023年1月10日|
我想选择个 * Insert_Date * 等于Now date但没有写入的记录

select * from *My_Table* where insert_date = '11-JAN-23' ;

我试过了

select * from *My_Table* where insert_date = TRUNC(CURRENT_DATE) ;

但它不起作用;

ffx8fchx

ffx8fchx1#

在Oracle中,DATE是一种二进制数据类型,总是具有年、月、日、小时、分钟和秒组件。然而,客户端应用程序(SQL*Plus、SQL Developer等)通常不显示整个DATE,而仅显示日期组件而不显示时间组件;这并不意味着时间组件不存在,只是您没有看到它的默认格式。
这意味着您的日期可能还包含非午夜时间组件,并且您的查询在时间组件上不匹配。要解决此问题,您可以选择一个范围:

SELECT *
FROM   My_Table
WHERE  insert_date >= TRUNC(CURRENT_DATE)
AND    insert_date <  TRUNC(CURRENT_DATE) + INTERVAL '1' DAY;

或者可以使用TRUNC,但这会阻止在insert_date列上使用索引:

SELECT *
FROM   My_Table
WHERE  TRUNC(insert_date) = TRUNC(CURRENT_DATE);

注:要更改SQL*Plus和SQL Developer在当前会话中格式化日期的方式,可以用途:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
bmp9r5qi

bmp9r5qi2#

试试看:

SELECT * FROM My_Table WHERE Insert_Date = CAST( GET_DATE() AS Date)

相关问题