5

Rails で open_time という文字列列を作成しましたが、datetime 型を使用する必要があることに気付きました。やった

change_column :polls, :open_time, :datetime

しかし、それは言った:

PG::Error: ERROR:  column "open_time" cannot be cast to type timestamp without time zone
: ALTER TABLE "polls" ALTER COLUMN "open_time" TYPE timestamp

文字列列を削除して新しい日時列を追加すると、文字列列に格納されているデータが失われます。または、PostgreSQL で次の列を追加します。

 ALTER TABLE polls ADD COLUMN published_time timestamp;

次に、次のような文字列列からデータを取得しようとしました:

UPDATE polls SET published_time = strToTimeStamp(open_time);

strToTimeStampだから私の質問は、文字のさまざまなタイプをタイムゾーンタイプなしでタイムスタンプに変換できるように使用できる関数はありますか?

4

2 に答える 2

5

.. strToTimeStamp として使用できる、文字の可変型をタイムゾーン型なしのタイムスタンプに変換できる関数はありますか?

to_timestamp()列のデータ型を変更するために使用します。

ALTER TABLE tbl ALTER COLUMN col TYPE timestamp
USING to_timestamp(col, '<your pattern here>');

これらの非常によく似た質問の詳細:
文字フィールドを日付に変更
する varchar 型を日付にキャストする

于 2012-11-14T10:03:02.247 に答える
-3

データベースの機能によって制限されるため、それができるとは思わないでください。アイデアは次のとおりです。

  • 別の名前で新しい列を作成しました
  • 各行のデータ変換後に列の内容をコピーします
  • 元の列を削除します
  • 新しい列の名前を元の列名に変更します

これらの手順は、同じ移行ファイルに配置して、万が一の場合に備えてトランザクションに保持することができます。

于 2012-11-14T04:07:35.183 に答える