oracle sql 查询 中 相同 数据 类型 之间 的 日期 比较

zengzsys  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(174)

我有一个专栏的格式是-

MAX_DATE                                PROCESS_DATE
2022-10-14T16:09:09.272+00:00           2022-11-08T15:43:29.027+00:00

在编写条件时

SELECT * FROM ANC 
WHERE MAX_DATE > PROCESS_DATE

即使这样,仍然有很多行出现,尽管它们不满足条件。两者的日期格式是相同的,我不知道如何将它们更改为相同的日期格式,我尝试了下面的方法,但仍然得到了所有行,因此上述条件不起作用

SELECT * FROM ANC 
WHERE TO_DATE(to_char(MAX_DATE,'DD-MM-YYY'),'DD-MM-YYY') > TO_DATE(to_char(PROCESS_DATE,'DD-MM-YYY'),'DD-MM-YYY')

同时,它还提供了如下输出:

MAX_DATE                                PROCESS_DATE
2022-10-14T00:00:00.000+00:00           2022-11-08T00:00:00.000+00:00

如何比较这两个日期?

xesrikrc

xesrikrc1#

如果列的数据类型为TIMESTAMP WITH TIME ZONE,则直接比较列即可:

SELECT *
FROM   ANC 
WHERE  MAX_DATE > PROCESS_DATE

如果列的数据类型为VARCHAR2,那么首先,这是一种不好的做法,您应该修改表并将数据类型更改为TIMESTAMP WITH TIME ZONE;其次,如果要将它们保留为字符串,则需要在比较它们之前使用TO_TIMESTAMP_TZ函数将它们转换为时间戳:

SELECT *
FROM   ANC 
WHERE  TO_TIMESTAMP_TZ(MAX_DATE, 'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM')
         > TO_TIMESTAMP_TZ(PROCESS_DATE, 'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM')
huwehgph

huwehgph2#

请 尝试 以下 查询

where 
convert(datetime, MAX_DATE)  >= convert(datetime,PROCESS_DATE)

中 的 每 一 个

相关问题