我有下表| 项目|插入日期|| - ------|- ------|| 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) ;
但它不起作用;
ffx8fchx1#
在Oracle中,DATE是一种二进制数据类型,总是具有年、月、日、小时、分钟和秒组件。然而,客户端应用程序(SQL*Plus、SQL Developer等)通常不显示整个DATE,而仅显示日期组件而不显示时间组件;这并不意味着时间组件不存在,只是您没有看到它的默认格式。这意味着您的日期可能还包含非午夜时间组件,并且您的查询在时间组件上不匹配。要解决此问题,您可以选择一个范围:
DATE
SELECT * FROM My_Table WHERE insert_date >= TRUNC(CURRENT_DATE) AND insert_date < TRUNC(CURRENT_DATE) + INTERVAL '1' DAY;
或者可以使用TRUNC,但这会阻止在insert_date列上使用索引:
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';
bmp9r5qi2#
试试看:
SELECT * FROM My_Table WHERE Insert_Date = CAST( GET_DATE() AS Date)
2条答案
按热度按时间ffx8fchx1#
在Oracle中,
DATE
是一种二进制数据类型,总是具有年、月、日、小时、分钟和秒组件。然而,客户端应用程序(SQL*Plus、SQL Developer等)通常不显示整个DATE
,而仅显示日期组件而不显示时间组件;这并不意味着时间组件不存在,只是您没有看到它的默认格式。这意味着您的日期可能还包含非午夜时间组件,并且您的查询在时间组件上不匹配。要解决此问题,您可以选择一个范围:
或者可以使用
TRUNC
,但这会阻止在insert_date
列上使用索引:注:要更改SQL*Plus和SQL Developer在当前会话中格式化日期的方式,可以用途:
bmp9r5qi2#
试试看: