我遇到过必须将数据库列“价格”的数据类型从字符串更改为小数的情况。问题是数据库中存在一些不正确的现有值,例如“120.45.32”,应将其更正为“12045.32”。我已经尝试过,CAST 为十进制,但它给出“120.00”。如何在迁移文件中解决此问题?
我尝试过CAST(价格为DECIMAL(10,2))。迁移有效,但所有现有的十进制值都会替换为“.00”,例如 120.45 -> 120.00
就像 Barmar 所说,你需要删除所有第一个点。
CREATE TABLE Vale (text_1 varchar(10));
INSERT INTO Vale VALUES ('120.45.32')
SELECT * FROM Vale
文本_1 |
---|
120.45.32 |
UPDATE Vale
SET text_1 = regexp_replace(text_1,'[\.]','',1,1)
WHERE LENGTH(text_1)
- LENGTH( REPLACE ( text_1, ".", '') ) = 2;
SELECT * FROM Vale
Rows matched: 1 Changed: 1 Warnings: 0
文本_1 |
---|
12045.32 |