use*_*630 127 postgresql
我正在使用以下查询:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
Run Code Online (Sandbox Code Playgroud)
从更改列的数据类型character(20)来numeric(10,0),但我得到的错误:
列"代码"无法强制转换为数字类型
mu *_*ort 228
您可以尝试使用USING:
optional
USING子句指定如何从旧值计算新列值; 如果省略,则默认转换与从旧数据类型转换为new的赋值相同.一个USING如果从旧到新类型没有隐含或者赋值转换必须提供条款.
所以这可能会起作用(取决于您的数据):
alter table presales alter column code type numeric(10,0) using code::numeric;
-- Or if you prefer standard casting...
alter table presales alter column code type numeric(10,0) using cast(code as numeric);
Run Code Online (Sandbox Code Playgroud)
如果你有任何code不能转换为数字的东西,这将失败; 如果USING失败,则必须在更改列类型之前手动清理非数字数据.
如果VARCHAR列包含空字符串(这是不一样的NULLPostgreSQL的,你可能还记得),您将在下面设置一个默认的行使用的东西:
ALTER TABLE presales ALTER COLUMN code TYPE NUMERIC(10,0)
USING COALESCE(NULLIF(code, '')::NUMERIC, 0);
Run Code Online (Sandbox Code Playgroud)
(在这个答案的帮助下找到)
| 归档时间: |
|
| 查看次数: |
204105 次 |
| 最近记录: |