我想比较具有不同日期格式的两列

Posted

技术标签:

【中文标题】我想比较具有不同日期格式的两列【英文标题】:I want to compare two column which has different date format 【发布时间】:2018-11-20 14:27:07 【问题描述】:

REQ_END_TIME = 03-APR-18 06.15.30.000000000 AMSENDDATE = 4/3/2018

两者都有相同的日期,所以我只想通过跳过时间戳来验证日期部分是否相同。 SENDDATE 格式为M/D/YYYY

如何更改其中的任何内容以使其类似于使用查询进行验证。

数据库 - 甲骨文

【问题讨论】:

将两者都转换为date。如果您使用格式存储它们,则使用varchar/char,请不要这样做:始终使用适当的数据类型。 不要将日期和时间存储为 varchar。曾经。这将永远不会成为您需要再次解决的问题。最好现在花时间学习如何转换它们以将它们正确存储为日期,而不是弄清楚如何转换它们或即时比较日期时间的字符串表示形式。 如何将列转换为日期格式? 我不知道较早的响应者如何知道您的列的数据类型。从你的帖子看不清楚。 SENDDATE 是字符串,还是实际上是数据库中的 DATE?您可以使用 DESCRIBE 命令轻松找到 - DESCRIBE TABLE_NAME 将在名为 TABLE_NAME 的表中显示每列的名称和数据类型。请检查两列的数据类型并将您的发现添加到您的帖子中。 @mathguy,实际上可能REQ_END_TIMETIMESTAMPSENDDATEDATE 值。默认NLS_DATE_FORMATNLS_TIMESTAMP_FORMAT 可以完全不同。 【参考方案1】:

您可以使用CASTto_date (with the format mask)

select * from mytable
 where to_date(CAST(REQ_END_TIME as char(10)), 'DD/MM/YYYY') =
 to_date(SENDDATE, 'MM/DD/YYYY')

它会返回:

03.04.18   =   03.04.18

Compiled query

【讨论】:

【参考方案2】:

您可以将两者都转换为日期或字符串:

where to_date(substr(req_end_time, 9), 'DD-MON-YYYY') = to_date(send_date, 'MM/DD/YYYY')

【讨论】:

to_date('03-APR-18 06.15.30.000000000 AM', 'DD-MON-YYYY') 将不起作用。最好使用TO_timestamp('03-APR-18 06.15.30.000000000 AM', 'DD-MON-RR hh.mi.ssxff am'),前提是它们是 varchar2【参考方案3】:

假设 SENDDATE 已经是日期格式

select (to_date(REQ_END_TIME,'M/D/YYYY') - SENDDATE ) COMPARE
from mytable

【讨论】:

以上是关于我想比较具有不同日期格式的两列的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle SQL 中组合不同的日期和时间列以创建一个具有日期/时间格式的列

如何在 SQL Server中 将日期格式化

如何在 SQL Server中 将日期格式化

比较特定时间间隔的不同格式的纪元日期

BigInt不会转换为正确的日期格式

处理具有混合日期格式的 Pandas 数据框列