0

次の形式で日付を受け入れるクエリがあります。

「2012 年 8 月 31 日」

月を数値として返すクエリが必要です。上記の日付の場合、戻り値は 08 になります。

私は次のことを試しました:

EXTRACT(MONTH FROM DATE '31 AUG 2012')
TO_DATE('31 AUG 2012', 'MM')
TO_CHAR('31 AUG 2012', 'MM')

それぞれ以下のエラーが表示されます。

ORA-01861: リテラルがフォーマット文字列と一致しません ORA-01843: 有効な月ではありません ORA-01722: 無効な数値です

これはどのように達成できますか?ありがとう

4

5 に答える 5

3
SELECT EXTRACT(MONTH FROM date '2012-08-31') FROM dual;
于 2013-03-26T13:21:43.830 に答える
2
EXTRACT(MONTH FROM to_date('31 AUG 2012','DD MON YYYY'))

日付 '' 演算子は ISO 形式のみを受け入れます ...

date '2012-08-31'
于 2013-03-26T09:31:10.420 に答える
0

に変換する08必要があるのは、文字フィールドであるため、正確な数値を返すようにオーバーを使用8したためです。08to_number()to_char

select to_number(to_char(to_date('31-AUG-2012','DD-MON-YYYY'),'MM')) from your_tbl;
于 2013-03-26T12:59:56.420 に答える
0

実際にあなたが間違えたのは、'DD/MM/YYYY' を指定する代わりに format_mask として 'MM' のみを指定したことです。それもうまくいくことを願っています

SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS') FROM AB;

出力: 26/03/2013 15:15:34

月だけを表示する必要がある場合は、これを使用してみてください。

SELECT EXTRACT(MONTH FROM SYSDATE) FROM AB;

上記は3月を3として表示します(今日の日付を考慮して)

于 2013-03-26T09:48:38.773 に答える
-1
select substr(to_date(sysdate,'dd-mon-yyyy'),4,3) from dual;
于 2013-03-26T10:06:01.020 に答える