mysql |修改表格数据类型

纯记录,以后希望能记得;记不住就来找。可以直接看总结

问题描述

之前将excel内容导入到mysql数据库,之前的excel列内容为string文本,存到数据库数据类型为varchar 50;现在因为业务需要将string文本对应的内容通过枚举转换为数字int。

原stringValue
xxx0
包含yyy的内容1
空值2

过程描述

使用update转换

首先使用update将对应文字转换为数字,在这次的场景中有三种文本类型,首先更新前两种,一种为空,一种为xxx 。

SET SQL_SAFE_UPDATES = 0;
UPDATE contract_production_records
SET settlement_status = CASE 
               WHEN settlement_status = 'xxx' THEN 0
                WHEN settlement_status= '' THEN 2
                ELSE settlement_status  -- 保持其他值不变
              END;

接下来更新第三种,其中第三种包含了某几个字眼,比如yyy,需要用到like,代码如下:

UPDATE contract_production_records
SET settlement_status = 1
WHERE settlement_status LIKE '%yyy%' 

设置完成后记得设置:

SET SQL_SAFE_UPDATES = 1;

转换数据类型

最开始使用了如下代码,但是数据中居然有含空格的值,因此无法转为int类型。
注意:以后从excel导入sql时记得去除空格再读取数据。

SET SQL_SAFE_UPDATES = 0;
UPDATE contract_production_records
SET settlement_status = CAST(settlement_status AS UNSIGNED);                   --(会出错) “ ”无法转换为数字

前面基本已经将有文本和空的地方都转换成了数字,然后检查是否真的还有空格数据,然后确实出现几条:

SELECT settlement_status
FROM contract_production_records
WHERE settlement_status NOT REGEXP '^[0-9]+$'; --确实有“ ”中间有个空格

那么接下来就是处理空格数据:


UPDATE contract_production_records
SET settlement_status = 2
WHERE settlement_status =' ' --中间是有个空格的

接下来就直接修改列的数据类型:

ALTER TABLE contract_production_records
MODIFY COLUMN settlement_status INT; --(可以用,而且是永久改变)

中间出了点小插曲,使用CAST只是临时改变列的数据类型:

SET SQL_SAFE_UPDATES = 0;
UPDATE contract_production_records
SET settlement_status = CAST(settlement_status AS UNSIGNED);                   --临时改变

总结

将文本枚举为数字,当然也可以转换为其他类型:

SET SQL_SAFE_UPDATES = 0;
UPDATE table
SET column = CASE 
               WHEN column = 'xxx' THEN 0
                WHEN column= 'yyy' THEN 2
                ELSE settlement_status  -- 保持其他值不变
              END;

永久改变列的数据类型:

ALTER TABLE xx_table
MODIFY COLUMN yy_column data_type; --(可以用,而且是永久改变)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值