Mysql SET 字段综合处理

本文详细介绍了MySQL中SET字段的基本使用、特殊处理,包括删除与新增指定位置的值,转换为INT类型时的值变化及保留处理,以及如何从INT类型转回SET类型。在转换过程中,需要注意值的对应关系和处理方法,如值的截取、空值处理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.set字段基本说明

 

2.set字段基本使用

 

3.set字段特殊处理

         1.SET字段的值作为字符串处理,更新列p927,统一删除为10的值

UPDATE datp0 SET p927 = REPLACE (REPLACE(REPLACE(p927,',10',''),'10,',''),'10','') WHERE FIND_IN_SET(10,p927)>0;

        2.SET字段的值作为字符串处理,更新列p927,统一新增10的值

UPDATE datp0 SET p927 = CONCAT(p927,IF((p927 IS NULL OR p927=''),'10',',10'))

4.set字段的值,取某一个位置的值

     1)取第一个

select LEFT(字段,1) WHERE 字段!='' OR 字段IS NOT NULL;

    2)取中间的某一个 

select substring_index(substring_index(该字段, ',', 2) , ',', -1) from 表名;

 这一条借鉴的文章地址:Mysql字符串截取

       需要先判断是否存在第二项,第三项,否则最后的结果都是第一个。

    判断set里面包含的值得数量  

SELECT LENGTH(字段)-LENGTH(REPLACE(字段,',','')) from 表名

    3)取最后一个

select RIGHT(字段,1) WHERE 字段!='' OR 字段IS NOT NULL;

5 mysql数据库set类型修改为int类型时,值的变化

    1)set类型

             字段定义为:

`p254` set('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','99') DEFAULT NULL

字段包含的值:(NULL),'',0,1,2

执行字段定义修改语句:

ALTER TABLE datp0 MODIFY p254 INT(2) DEFAULT NULL COMMENT '';

之后比较修改前后的两个值对比发现,修改前后的值不一致。对应关系为:

执行前--》执行后   NULL-->NULL;''-->0;0-->1;1-->2;2-->4

6.将set类型的改为int类型,需要将值保留的处理

1) 修改前字段定义:

CREATE TABLE `datp111` (
`datid` int(11) NOT NULL,
`p1207` set('1','2','3','4') DEFAULT NULL,
PRIMARY KEY (`datid`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8

2)备份值

需要对值进行处理,set存在多个值的,只要判断值里面包含逗号,非原创链接,https://www.php.cn/mysql-tutorials-442230.html

set中的空值需要替换为特定的值,目前是处理为-1,其他的使用concat转为字符串

CREATE TABLE datp111_part_tmp AS SELECT datid,if(p1207 !='' ,concat(p1207,''),'-1') p1207 FROM datp111;

3)设置旧字段为NULL

update datp111 set p1207=null;

4)修改字段类型

alter table datp111 modify p1207 int;

 5)将旧值赋值到修改类型后的字段

UPDATE datp111 d, datp111_part_tmp d1 SET d.p1207=d1.p1207 WHERE d.datid=d1.datid 

6)删除之前建的表

drop table datp111_part_tmp;

7.int类型转为set类型

建表语句

CREATE TABLE `datp103` (
  `datid` int(11) NOT NULL,
  `p1526` varchar(11) DEFAULT NULL,
  `p1559` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

处理语句

#-1是int类型默认值,处理为空,其他值转为字符串类型
drop table if exists datp103_part_tmp;
CREATE TABLE datp103_part_tmp AS SELECT datid,if(p1526 !='-1' ,concat(p1526,''),'') p1526,if(p1559 !='-1' ,concat(p1559,''),'') p1559 FROM datp103;

#字段所有值设置为NULL
UPDATE datp103 SET p1526=NULL,p1559=null;
#修改字段类型
ALTER TABLE datp103 MODIFY p1526 set('1','2','3','4','5','6','7','8','9','10','11','12','99') DEFAULT NULL, MODIFY p1559 SET('1','2','3','4','5','6','7','8','9','10','11','12','99') DEFAULT NULL;
#更新值
UPDATE datp103 d, datp103_part_tmp d1 SET d.p1526= concat(d1.p1526,''),d.p1559= CONCAT(d1.p1559,'') WHERE d.datid=d1.datid;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值