2016-12-24 5 views
1

一部のデータをテキストファイルからPostgreSQLテーブルにインポートしたいとします。テーブルを作成すると、データ型がDATEの列があります。私は、データをインポートするときは、このエラーを与える:YYYY/MMとYYYY/MM/DDをPostgreSQLの同じ列にインポートするには?

ERROR: invalid input syntax for type date: "2009/11"

その列の私のデータの一部がYYYY/MM/DDの形式を持っており、そのうちのいくつかは、YYYY/MMの形式を持っています。今私の質問は、どのようにこれらのデータをインポートできますか?

+1

日が必要とされていない場合、私はちょうどYYYY/MM入力に/ 01を追加します。 – Jaxedin

+0

@Jaxedin私はこのコマンドでデータをインポートします:\ copy Papers 'Papers.txt';インポート中にデータに/ 01を追加するにはどうすればよいですか? –

+0

oh。それは重要なステップです...一度の操作ですか、またはそのファイルを複数回インポートする必要がありますか?あなたはPapers.txtを上回るプロセスにアクセスしましたか? – Jaxedin

答えて

0

記録のため。私はPostgresSQLを自分で使用しないので、ネイティブツールやこれを行う方法があるかどうかわかりません。

これは1回の操作であるため、列のデータ型をDATEからTEXTに変更するか、新しい一時TEXT列を作成します。

インポート、そのテーブル上のtxtファイルや不足している日を追加するクエリを実行し(それは重要ではありませんが、日付フォーマットで必要なので)

UPDATE table SET dateColumn = dateColumn + '/01' WHERE len(dateColumn) = 7; 

有効PostgresSQLの構文でそれを記述してください。列の値を更新し、長さが7(YYYY/MM)の場合は '/ 01'を追加する必要があります。

その後、一時列の値をDATE列にコピーするか、データ型をDATEに戻します。あなたが以前に選択したパス。

メリークリスマス!

+0

eww、以下はDuduの答えですより良い。 –

2
select to_date(dateColumn,'yyyy/mm/dd') 

select to_date('2009/11/07','yyyy/mm/dd') 

2009-11-07

select to_date('2009/11','yyyy/mm/dd') 

2009-11-01

select to_date('2009','yyyy/mm/dd') 

2009-01-01

+0

この場合、ソリューションは非常に簡単です –

+0

データをインポートしたいのですが、インポート中にエラーが発生します!selectコマンドはどのように役立ちますか? –

+0

他の回答と同様に更新を行っている場合は、これを行う最もクリーンな方法です –

関連する問題