PostgreSQLのテーブル列を整数から通貨に変換しようとしていますが、次のエラーが表示されます。
タイプMyColumnをマネーにキャストできません
私はこれら2つのステートメントを試してみましたが、実際にそれを行う方法についての実際の例を見つけていません。
ALTER TABLE products
ALTER COLUMN price TYPE money
そして:
ALTER TABLE products
ALTER COLUMN price TYPE money USING to_char(price, '999.99')
PostgreSQL列のデータ型を整数から通貨に変更するにはどうすればよいですか?
次のコマンドを試してください。
ALTER TABLE products ALTER COLUMN price TYPE money using price::text::money
引用符で囲まれていない数値は、数値をテキストにキャストしてからmoneyに変換することでmoneyに変換できます。
試す
ALTER TABLE products
ALTER COLUMN price TYPE money USING price::money
ところで、2回目の試行でどのエラーが発生しましたか?
francs はすでに暗示されているため、 整数からマネーへのデフォルトのキャストはありません ( 9.1 まで)があり、代わりにテキストへの中間キャストが必要です。
_select 78::integer::money;
ERROR: cannot cast type integer to money
LINE 1: select 78::integer::money;
^
select 78::integer::text::money;
money
--------
£78.00
_
ただし、エラーはわずかです。 select to_char(78, '999.99')::money
は成功しますが、以下は失敗することに注意してください:
_alter table products alter column price type money using to_char(price, '999.99');
ERROR: column "price" cannot be cast to type money
_
しかし、明示的なキャストでは成功します:
_alter table products alter column price type money using to_char(price, '999.99')::money;
ALTER TABLE
_
これは私にはバグのようです-私はまだテストする9.0または9.1を持っていません。うまくいけば、それらのバージョンで修正されているのか、それともバグとして報告する必要があるのか、他の誰かが言うことはできません。
余談ですが、price> = 1000の行がある場合、明示的なキャストを使用しても元のエラーはもちろん失敗します。
_alter table products alter column price type money using to_char(price, '999.99')::money;
ERROR: invalid input syntax for type money: " ###.##"
_