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
相關問題