select * from mytable where datecolumn == to_date('01-DEC-13','DD-MMM-YY')
我收到「ORA-01821:日期格式無法識別」如何正確查詢oracle日期?
我在哪裏了SELECT * FROM MYTABLE做一個查詢,我看到,在datecolumn值顯示出來,如「01-DEC- 13「我做錯了什麼?
select * from mytable where datecolumn == to_date('01-DEC-13','DD-MMM-YY')
我收到「ORA-01821:日期格式無法識別」如何正確查詢oracle日期?
我在哪裏了SELECT * FROM MYTABLE做一個查詢,我看到,在datecolumn值顯示出來,如「01-DEC- 13「我做錯了什麼?
除非你是100%肯定你永遠不會使用不同的語言設置,我會建議使用MM代替MON:
select * from mytable where datecolumn = to_date('2013-12-01', 'YYYY-MM-DD')
這將與任何NLS設置工作,而比較TO_DATE與「DEC」輸出(MON ... ...)將完全在失敗不同的地區。
試試這個:
SELECT * from MYTABLE WHERE TO_CHAR(datecolumn,'DD-MON-YY') == '01-DEC-13'
,而不是轉換你的通配符,嘗試將時間值轉換。
這將呈現datecolumn上的任何索引無用(除非您使用的是基於函數的索引)。反過來(轉換參數)反而更合理。 – 2013-03-26 09:56:05
我建議使用整個世紀的日期。我處理了大量數據庫,其中有些人因爲不瞭解Oracle或前端語言而混淆了數個世紀。考慮此爲您01-DEC-13
日期:
CREATE TABLE LousyDates (DateVal DATE);
INSERT INTO LousyDates VALUES (DATE '2013-12-01');
INSERT INTO LousyDates VALUES (DATE '1713-12-01');
INSERT INTO LousyDates VALUES (TO_DATE('12/1/13 BC', 'MM/DD/YYYY BC'));
SELECT
TO_CHAR(DateVal, 'DD-MON-YY') AS NoCentury,
TO_CHAR(DateVal, 'MM/DD/YYYY BC') AS WithCentury
FROM LousyDates;
NOCENTURY WITHCENTURY
------------------ -------------
01-DEC-13 12/01/2013 AD
01-DEC-13 12/01/1713 AD
01-DEC-13 12/01/0013 BC
好吧,也許我拔高與BC 13日的點,但你的想法:)
要使用的世紀......
SELECT * FROM MyTable WHERE datecolumn = TO_DATE('01-DEC-2013', 'DD-MON-YYYY')
或
SELECT * FROM MyTable WHERE datecolumn = DATE '2013-12-01'
使用ANSI日期文字的+1 – 2013-03-26 10:20:54
試試我的答案.. – 2013-03-26 02:40:38
Oracle是否使用'=='? – 2013-03-26 02:41:06
只需將「MMM」更改爲「MON」即可。我不認爲oracle to_date支持「MMM」 – spiritwalker 2013-03-26 02:42:53