2017-01-11 11 views
1

(PostgreSQLデータベース)I「はYYYY-MM-DD」の形式であるように思われる日付列がSQLクローニング及び日付列に変換

まずIによると、変換したい列が 'に「yyyymm」。

その後、同じテーブル内の別の列に「year」と呼ばれる列を複製して、それを「yyyy」の形式でのみ作成する必要があります。

私はまだ私のケースに当てはまる簡単な解決策を見つけることができません。私は

ALTER TABLE mytable ADD year character varying(4); 

を実行して新しい列を追加するには(他の既存の列を除く)は、このようになり

date /*already exists*/ year /*need to create*/ 
    201501     2015 
    201501     2015 
    201502     2015 
    201606     2016 

乾杯

+1

なぜ日付をvarchar(または整数)列に格納していますか?本当の 'date'データ型を使わないのはなぜですか?もしあなたがそれを持っていれば、あなたは好きなフォーマットで日付を表示することができます –

+0

日付の列は今は '日付'のデータ型です。私はちょうど別の列に変換する方法はわかりませんでしたが、ありがとう。 – MG97

+0

"*が*であるように見える"というのは正しいですが、postgresqlの日付の列は(ディスク上の)整数型ですが、プレゼンテーションの場合は年月日のように見えます。 – Jasen

答えて

2

を実行するには、このヘルプはあなたでしょうか?

これは、TO_CHAR関数で組み込みの日付書式を使用しています。私は完全にpostgresql tho 'で家ではないので、いくつかの微調整を行う必要があります。

UPDATE 
    TABLENAME 
SET 
    year = TO_CHAR(date, 'YYYY'), 
    date = TO_CHAR(date, 'YYYYMM'); 

コラム「年」はまだ存在していない、あなたは

ALTER TABLE [table_name] ADD COLUMN [column_name] [data_type] {collation} {column_contstraint}; 

私は正しい使用方法についてはdocumentationをチェック推薦する最初のALTER TABLE文でそれを作成する必要があります場合。

編集:すべての行を更新するのに時間がかかることを心配している場合は、this postを読むことをお勧めします。

各行を更新するのではなく、データを使ってテーブルを最初から作成するほうが簡単かもしれないと説明しています。

+0

これで列は作成されませんか?私は列 "年"のフォーマットを設定する方法がわからないので、列自体を作成していない、歓声。また、私のコラムは200万行を超えています。私はupdate/setメソッドを使用していると聞きましたが、そのレベルでかなりのリソースを要求しています。これは本当ですか? – MG97

+0

ああ、私の悪いです。さて、一度実行する 'ALTER TABLE ADD COLUMN ...'コマンドを使って最初に列を作成し、上記の 'UPDATE'文を適用する必要があります。私はこれで私の答えを編集しています。 –

+0

@ MG97テーブルが本当に大きいときにデータを更新する方法についてのリンクを含め、私の答えにいくつか追加しました。 –

2

を列が欲しい最後に

テーブルにロックがない場合は、すぐに終了するはずです。

、データを変更

UPDATE mytable 
SET date = substr(date, 1, 4) || substr(date, 6, 2), 
    year = substr(date, 1, 4); 
+0

こんにちは、あなたの答えをありがとう、これも私の日付の列を作成しますか? – MG97

+0

また、私の列には200万行以上の行があります。私はupdate/setメソッドを使用していると聞きましたが、そのレベルではかなりのリソースが必要ですが、これは本当ですか? – MG97

+0

カラムを作成する方法を追加しました。 200万行はそれほど多くないので、心配しないでください。もちろん、これはテーブル全体を書き換えるため、リソースを消費しますが、すべての行を変更する必要がある場合は避けられません。 –

関連する問題