2012-03-12 14 views
1

この列はVARCHARとして定義されています。この列の データ:char-date-charの変換

2012-03-11 12:10:00.0 IST

私は日付の部分を取得したいです。
どうすればいいですか?

私は日付に変換するに疲れ:

to_char(to_date('2012-03-11 12:10:00.0 IST', 'YYYY-MM-DD'),'YYYY-MM-DD')

しかし、エラーが発生しました:日付形式の画像は、入力文字列全体に

+4

なぜvarcharカラムに日付/時刻データがありますか?代わりにdatetime列を使用しないでください。 –

+0

あなたのvarchar2列は 'DD'で停止しません。http://www.techonthenet.com/oracle/functions/to_date.phpを参照してください。 – Ben

+1

@kenny - あなたは' DATE'をどうしますか? OracleのDATEにはタイムゾーンも秒数もないので、データをDATEに変換するときに両方を無視しますか?または、時間を標準時間帯(GMT/UTC)に変換しますか?分数秒とタイムゾーンをサポートする 'TIMESTAMP WITH TIME ZONE'に文字列を変換したくないのですか? –

答えて

5

アップデートを変換する前に終了します。私はあなたが権利を取得した場合は、日付のみをしたいです部分でもは現在のところに変換されていませんか? は、その後、次の操作を行います。

select SUBSTR('2012-03-11 12:10:00.0 IST', 1, 10) 

あなたは、日付に変換したい場合は、この操作を行います。

select to_date(SUBSTR('2012-03-11 12:10:00.0 IST', 1, 10)) 
+0

-1、OPには正しい考えがあり、最初に日付に変換します。あなたは効果的にcharツールで日付変換を行っています。 – Ben

+2

+1元の文字列にdatetime形式を指定すると、これを文字列**から変換する最も簡単な方法です。 –

+1

@ MarkBannister、それはまた、黙って失敗する可能性が最も高く、間違った結果をもたらす可能性が最も高いです。はい、それは_日常的なdatetime形式の場合は_それは動作しますが、これはvarcharとして格納され、私は潜在的な落とし穴は約20文字のコードとマイクロ秒または2の価値があるとは思わない。 – Ben

1

ユルゲンdは良好であり、最速のかもしれません。しかし、あなたもこのようにすることができます:
select cast(to_timestamp('2012-03-11 12:10:00.0 IST', 'YYYY-MM-DD HH24:MI:SS.FF1 "IST"') as date) from dual;