我想比较具有不同日期格式的两列
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 AM
SENDDATE
= 4/3/2018
两者都有相同的日期,所以我只想通过跳过时间戳来验证日期部分是否相同。
SENDDATE
格式为M/D/YYYY
如何更改其中的任何内容以使其类似于使用查询进行验证。
数据库 - 甲骨文
【问题讨论】:
将两者都转换为date
。如果您使用格式存储它们,则使用varchar/char
,请不要这样做:始终使用适当的数据类型。
不要将日期和时间存储为 varchar。曾经。这将永远不会成为您需要再次解决的问题。最好现在花时间学习如何转换它们以将它们正确存储为日期,而不是弄清楚如何转换它们或即时比较日期时间的字符串表示形式。
如何将列转换为日期格式?
我不知道较早的响应者如何知道您的列的数据类型。从你的帖子看不清楚。 SENDDATE
是字符串,还是实际上是数据库中的 DATE
?您可以使用 DESCRIBE
命令轻松找到 - DESCRIBE TABLE_NAME
将在名为 TABLE_NAME
的表中显示每列的名称和数据类型。请检查两列的数据类型并将您的发现添加到您的帖子中。
@mathguy,实际上可能REQ_END_TIME
是TIMESTAMP
和SENDDATE
是DATE
值。默认NLS_DATE_FORMAT
和NLS_TIMESTAMP_FORMAT
可以完全不同。
【参考方案1】:
您可以使用CAST
和to_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
【讨论】:
以上是关于我想比较具有不同日期格式的两列的主要内容,如果未能解决你的问题,请参考以下文章