我创建了下表并插入了 2 条记录。
CREATE TABLE TIME_TEST(tran_data_timestamp timestamp)
insert into time_test values('07-DEC-23 12.01.55.000000000 AM');
insert into time_test values('07-DEC-23 12.01.33.000000000 AM');
在执行以下查询时,它会获取所有记录。
select *
from time_test
where tran_data_timestamp > TO_TIMESTAMP('06-12-23 00:02:25.000000', 'DD-MM-YY HH24:MI:SS.FF')
and tran_data_timestamp <= TO_TIMESTAMP('07-12-23 12:00:50.000000', 'DD-MM-YY HH24:MI:SS.FF')
23 年 12 月 7 日 12.01.55.000000000 上午
23 年 12 月 7 日 12.01.33.000000000 上午
根据条件,第一条记录不应出现。 请帮忙解决这个问题。
简单:
'07-DEC-23 12.01.55.000000000 AM'
--> 凌晨12点。一天的开始 --> 24 小时制的 00
TO_TIMESTAMP('07-12-23 12:00:50.000000', 'DD-MM-YY HH24:MI:SS.FF')
--> 中午 12 点 --> 下午 12 点 --> 24 小时格式的 12 点。
您混合了 12 小时和 24 小时时间。
停止使用隐式字符串到时间戳转换并使用时间戳文字并将值显示为 24 小时制,您将看到
'07-DEC-23 12.01.55.000000000 AM'
,即 2023-12-07 00:01:55.000000000
位于 2023-12-06 00:02:25.000000
和 2023-12-07 12:00:50.000000
之间。
CREATE TABLE TIME_TEST(tran_data_timestamp timestamp)
insert into time_test values(TIMESTAMP '2023-12-07 00:01:55.000000000');
insert into time_test values(TIMESTAMP '2023-12-07 00:01:33.000000000');
然后:
select *
from time_test
where tran_data_timestamp > TIMESTAMP '2023-12-06 00:02:25.000000'
and tran_data_timestamp <= TIMESTAMP '2023-12-07 12:00:50.000000'
输出:
TRAN_DATA_TIMESTAMP |
---|
2023-12-07 00:01:55.000000 |
2023-12-07 00:01:33.000000 |