select * from mytable where datecolumn == to_date('01-DEC-13','DD-MMM-YY')
「ORA-01821:日付形式が認識されません」というメッセージが表示されます
mytableからselect*をクエリすると、datecolumnの値が「01-DEC-13」のように表示されます。何が問題なのですか。
日付には世紀全体を使用することをお勧めします。私は、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
OK、多分私は紀元前13日の日付で要点を誇張しているかもしれません、しかしあなたは考えを理解します:)
世紀を使うには...
SELECT * FROM MyTable WHERE datecolumn = TO_DATE('01-DEC-2013', 'DD-MON-YYYY')
また
SELECT * FROM MyTable WHERE datecolumn = DATE '2013-12-01'
異なる言語設定を使用することが絶対にないという100%の確信がない限り、MONの代わりにMMを使用することをお勧めします。
select * from mytable where datecolumn = to_date('2013-12-01', 'YYYY-MM-DD')
これはどのNLS設定でも機能しますが、to_date(... MON ...)の出力を「DEC」と比較すると、異なるロケールでは完全に失敗します。
これを試して:
SELECT * from MYTABLE WHERE TO_CHAR(datecolumn,'DD-MON-YY') == '01-DEC-13'
ワイルドカードを変換する代わりに、日時を変換してみてください。