2012-03-30 10 views
1

テキストフィールドは日付ですが、時には時間コンポーネントもあります。例:Oracle 10g - 時間コンポーネントの削除

"23/1/1999" 
"25/2/2003 05:18:00" 

ここでは、単に日付コンポーネントのみをクエリして並べ替えたいと考えています。私の試み

TO_DATE(
     TO_CHAR(
      TO_DATE(mytextfield , 'DD-MM-YYYY HH:MI:SS') 
     ,'DD-MM-YYYY') 
,'MON-YYYY') 

は、上記(。ORA-01843無効月)外TO_DATEに

TO_CHAR(
    TO_DATE(mytextfield , 'DD-MM-YYYY HH:MI:SS') 
,'DD-MM-YYYY') 

上記の作品を失敗した、しかし、私は、文字列ではなく、日付が残っています。

--------ソリューションの回答で述べたようにジャスト

EXTRACT(MONTH FROM TO_DATE(timetable.string_time) , 'DD-MM-YYYY HH24:MI:SS')) 

EXTRACT(YEAR FROM TO_DATE(timetable.string_time) , 'DD-MM-YYYY HH24:MI:SS')) 

を使用受け入れ答え

を使用して、あなたは、ORDER BYで、あなたがそれを使用する順番を入れ替えることができますし、 SELECTの中で。

月に少しの書式設定が必要になりますが、いくつかのコンスタットは非常にうまく動作します。

答えて

6

NLS_DATE_FORMATは、TO_CHARおよびTO_DATE機能で使用するデフォルトの日付形式を指定します。のは、SQL * Plusのからの素敵な出力を得るためにそれを変更してみましょう:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; 

まず、我々は実際の日付の種類(以下、日付形式は短いテキストを受け入れることに注意してください)に日付のテキスト表現を変換するためにTO_DATEを使用します。

SELECT TO_DATE('25/2/2003 05:18:00', 'DD-MM-YYYY HH24:MI:SS') FROM DUAL; 
2003-02-25 05:18:00 

SELECT TO_DATE('25/2/2003', 'DD-MM-YYYY HH24:MI:SS') FROM DUAL; 
2003-02-25 00:00:00 

第二に - 私たちは、不要なフィールド(TRUNC機能)を取り除くために日付を切り詰めたい:

SELECT TRUNC(TO_DATE('25/2/2003 05:18:00', 'DD-MM-YYYY HH24:MI:SS')) FROM DUAL; 
2003-02-25 00:00:00 

SELECT TRUNC(TO_DATE('25/2/2003 05:18:00', 'DD-MM-YYYY HH24:MI:SS'),'MONTH') FROM DUAL; 
2003-02-01 00:00:00 

今、あなたはこれを使用することができます年/月/日などに基づいて注文したい場合はORDER BYまたはGROUP BYにしてください。

いくつかのエキゾチックな並べ替えを行いたい場合(グループ化するには、{year,month}{month, year}とまったく異なりません)。

SELECT EXTRACT(MONTH FROM DATE '1998-03-07') FROM DUAL; 
3 

SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL; 
1998 
+2

+1、私は 'HH'は' HH24'にする必要があることを賭けている:月/年は、その後、私はあなたが個々のフィールドを構成し、以下を使用する必要があると思います。 – ruakh

+0

あなたは正しいです。修正されました。 – Anonymous

+0

しかし、TRUNCの後にMON-YYYY形式に日付を変更するのは暑いですか?私はそれをすることはできません。 –

関連する問題