有一列字符型別不同 [] ,其中包含 uuid 型別的資料,例如
{0f071799-e37e-4e1c-9620-e580447416fe,913a7134-6092-45fa-ae18-163302db8112},
但也有一些其他型別的舊值,例如{5edfd4edfa1bb21a142442a0}.
列型別如何轉換? 我使用了腳本:
alter table services alter column office_ids type uuid[] USING office_ids::uuid[];
但給出錯誤 - uuid 型別的語法無效:“5edfd4edfa1bb21a142442a0”。
uj5u.com熱心網友回復:
您必須首先將您的 25 個字符值轉換為有效值uuid。
一種這樣的轉換是:
8f5f7cc46821423fa6057025a -> 00000008-f5f7-cc46-8214-23fa6057025a
用于此的 SQL 是:
regexp_replace('8f5f7cc46821423fa6057025a', '^(.)(.{4})(.{4})(.{4})(.{12})^', '0000000\1-\2-\3-\4-\5')
輸出:
00000008-f5f7-cc46-8214-23fa6057025a
這使有效的 uuid 保持不變。見現場演示。
您可以使用它來更新錯誤的值,如下所示:
update services set office_ids = array(
select regexp_replace(t.val, '^(.)(.{4})(.{4})(.{4})(.{12})$', '0000000\1-\2-\3-\4-\5')
from unnest(services.office_ids) as t(val)
)
然后您的 alter 命令將起作用。
見現場演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415493.html
標籤:
