0
select * from mytable where datecolumn == to_date('01-DEC-13','DD-MMM-YY')

「ORA-01821:日付形式が認識されません」というメッセージが表示されます

mytableからselect*をクエリすると、datecolumnの値が「01-DEC-13」のように表示されます。何が問題なのですか。

4

3 に答える 3

3

日付には世紀全体を使用することをお勧めします。私は、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'
于 2013-03-26T03:24:59.173 に答える
1

異なる言語設定を使用することが絶対にないという100%の確信がない限り、MONの代わりにMMを使用することをお勧めします。

select * from mytable where datecolumn = to_date('2013-12-01', 'YYYY-MM-DD')

これはどのNLS設定でも機能しますが、to_date(... MON ...)の出力を「DEC」と比較すると、異なるロケールでは完全に失敗します。

于 2013-03-26T09:58:59.727 に答える
0

これを試して:

 SELECT * from MYTABLE WHERE TO_CHAR(datecolumn,'DD-MON-YY') == '01-DEC-13'

ワイルドカードを変換する代わりに、日時を変換してみてください。

于 2013-03-26T02:39:29.647 に答える