2014-09-11 84 views
0

我有不同的格式的日期:比较不同格式的Oracle SQL日期

日期1:30-JAN-14

日期2:2014-01-30 10:06:04.0

我尝试使用下面的两个日期进行比较:

to_char(date2,'YYYY-MM-DD HH24:MM:SS') <> to_char(date1,'dd-MON-YY') 

但它给出了date1部分的以下错误:

Lietral does not match format String 

我试图直接

date2<>date1 

比较它们,我再次gtting相同的错误

编辑:日期2为varchar和日期1是DATE

+3

你有日期或字符串?你谈论日期,但日期没有格式。表示日期的字符串具有格式。但是,在一个字符串上调用'to_char'没有任何意义,只能在字符串上调用'to_date'。另外,平等会是什么样子?比较两者时,是否要忽略第二个值的时间分量? – 2014-09-11 02:07:45

+0

Date2是一个varchar列 日期1列的类型是DATE 2)我想忽略Date2的时间组件。我只是想检查这两个日期是否不相等 – user2133404 2014-09-11 02:10:06

回答

1

可能最容易使用substr并截断从date2列中的时间戳。然后你可以使用to_date比较:

select * 
from sometable 
where date1 <> to_date(substr(date2,1,10), 'YYYY-MM-DD') 
+0

谢谢。我没有收到任何错误。但这两个日期的处理方式不同。我希望30-JAN-14和2014-01-30 TIME平等。你能帮我用这个 – user2133404 2014-09-11 02:28:09

+0

@ user2133404 - 你看过小提琴吗?它根据您的样本数据返回相同的数据。 – sgeddes 2014-09-11 02:29:16

+0

对不起,它的工作正常。非常感谢 – user2133404 2014-09-11 02:54:19

0

你应该日期类型转换字符串相同的格式进行比较

0

你可以试试这个。 TO_CHAR(DATE2, 'YYYY-MM-DD')<> TO_CHAR(DATE1, 'YYYY-MM-DD')

+0

无效号码 - 我认为它在日期1 – user2133404 2014-09-11 02:20:37

+0

与sysdate不适用这种方法:)他返回dd/mm/yy而不是dd/mm/yyyy – delive 2017-12-22 09:49:51