varchar 型のフィールドがある (すべての値が null または数値の文字列表現である) 場合、alter table を使用してこの列の型を bigint に変換するにはどうすればよいですか?
3 に答える
文字列を解析するだけで変換するには (キャスト):
alter table the_table alter column the_column type bigint using the_column::bigint
実際、変換をカスタマイズするthe_column
代わりに、任意の式を使用できます。the_column::bigint
これによりテーブルが書き換えられ、完了するまでリーダーもロックアウトされることに注意してください。
タイプの一時的な列を作成し、次のbigint
ようにSQLを実行できます
UPDATE my_table SET bigint_column=varchar_column::bigint;
次に、varchar_column をドロップして、bigint_column の名前を変更します。これはちょっと回り道ですが、postgres でのカスタム キャストは必要ありません。
postgresql で文字列列タイプを数値または bigint に変換する方法
string から bigint への独自のカスタム キャストを設計します。このようなもの:
CREATE OR REPLACE FUNCTION convert_to_bigint(v_input text)
RETURNS BIGINT AS $$
DECLARE v_bigint_value BIGINT DEFAULT NULL;
BEGIN
BEGIN
v_bigint_value := v_input::BIGINT;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'Invalid bigint value: "%". Returning something else.', v_input;
RETURN 0;
END;
RETURN v_bigint_value;
END;
fixed_table_with_bigint
次に、string 列を bigint 列に変更することを除いて、古いテーブルと同じパラメータで新しいテーブルを作成します。
次に、前のテーブルのすべての行を (カスタム キャストを使用してconvert_to_integer
) 新しいテーブルに挿入します。
insert into fixed_table_with_bigint
select mycolumn1,
convert_to_bigint(your_string_bigint_column),
mycolumn3
from incorrect_table
convert_to_bigint
数字、空白文字列、null、制御文字、およびその他の奇妙な文字列を処理するには、変更が必要になる場合があります。
次に、最初のテーブルを削除し、2 番目のテーブルの名前を最初のテーブルに変更します。