[pgsql-jp: 41313] ALTER COLUMN の USING 句
Michihide Hotta
hotta @ net-newbie.com
2013年 1月 10日 (木) 14:41:53 JST
堀田@長崎市と申します。本年もよろしくお願いします。
SQL の文法について質問させてください。
以下のようなテーブルがあります。
CREATE TABLE a(d TEXT);
INSERT INTO a VALUES(' ');
INSERT INTO a VALUES('99999999');
カラム d には本来 '20120109' のような8桁の日付が入ってくるの
ですが、業務的に日付の最小値としてスペース、最大値として
オール 9 が入ってくるため、DATE 型として定義すると INSERT
(実際は CSV ファイルからの COPY 文による取り込み)時に制約
エラーとなります。
DATE 型にできれば PostgreSQL(バージョン 9.2.1 )に日付の
計算をしてもらえて便利なので、以下のようなことを考えました。
UPDATE a SET d='-infinite' WHERE d=' ';
UPDATE a SET d='infinite' WHERE d='99999999';
ALTER TABLE a ALTER COLUMN d SET DATA TYPE DATE;
これでうまくいくと思ったのですが、以下のように怒られました。
ERROR: 列"d"を型dateにキャストできません
HINT: 変換を行うためにUSING式を指定してください
http://www.postgresql.jp/document/9.2/html/sql-altertable.html
「古いデータ型から新しいデータ型への暗黙キャストあるいは代入
キャストがない場合、USING句を指定しなければなりません。」
だそうですが、USING 句をどう書けばよいかご教示いただけない
でしょうか。
PS.
sed の正規表現を駆使して CSV ファイル自体を書き換えることも
考えたのですが、CSV ファイルの種類や項目数が多いため、
できれば視認性が高い SQL でやりたいと思っています。
--
HOTTA Michihide <hotta @ net-newbie.com>
pgsql-jp メーリングリストの案内