1
只有当testdate列的数据类型为DATE时,才好奇为什么以下两个查询会给出不同的结果。Oracle按日期排序会给出不同的结果
select testdate from <table> order by to_date(testdate) desc;
返回
18-DEC-14
17-DEC-14
14-JUL-14
10-JUL-14
。
select testdate from <table> order by testdate desc;
返回
13-NOV-13
18-DEC-14
17-DEC-14
14-JUL-14
为什么会是2013年11月的结果显示在第二个结果的顶部时,按我说的coumn TESTDATE是数据tyle DATE和TO_DATE(的)解决了issueX?
什么'select to_char(testdate,'yyyy-mm-dd hh24:mi:ss')from
这里有一个切题的教训,那就是当你不确定为什么SQL返回一个特定的结果时,总是看看实际的数据。在这种情况下,仔细查看to_date(testdate)verrrrry的值,并考虑他们为什么按照他们的方式排序。 –
另外:'test_date(testdate)'是完全没有意义的,如果'testdate' **真**是一个日期。这会将'date'转换为'varchar',然后将'varchar'转换回它的开始日期。 –
回答
TO_DATE函数期望字符串将其转换为给定格式的日期。提供日期列到
to_date
可能会导致意外的行为,即使oracle不会抱怨给定的输入。来源
2015-09-07 08:36:16 ozy
基于通过评论OP的答复,这个问题是:
钍客户端显示一年YY由于这一年
3013
显示为13
,并连同其他日期2014
,它看起来就好像2013年在2014年之前按降序排列。使用TO_CHAR,以显示你想要的格式的日期,并使用TO_DATE到文字转换成日期。
在一个侧面说明,
Never use TO_DATE on a DATE,它会隐式转换为字符串,然后回使用特定语言环境的NLS日期格式。
来源
2015-09-07 09:48:26
相关问题