Oracle 中的时间戳

问题描述 投票:0回答:2

我创建了下表并插入了 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 上午

根据条件,第一条记录不应出现。 请帮忙解决这个问题。

sql oracle10g sql-timestamp
2个回答
0
投票

简单:

'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 点。


0
投票

您混合了 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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.