84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
因为之前数据库结构没设计好,导致现在数据很混乱。1.就比如下面那个 values 字段,想让他里面从小到大的排序。比如第一个变成 ["133","136","257"]我知道php能做,但是我现在想研究一下mysql相关的函数,请问是否有支持的。。
因为我之前做 批量更新的时候,就发现mysql有这个办法,感觉很强大
写个MySQL函数,在里面拆字符串,排序。
例如可以这样:
CREATE FUNCTION `sort_col`(`input` VARCHAR(50)) RETURNS VARCHAR(50) LANGUAGE SQL NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER COMMENT '' BEGIN declare a int; declare b int; declare c int; set a = cast(substr(input, 3, 3) as int); set b = cast(substr(input, 9, 3) as int); set c = cast(substr(input, 15, 3) as int); if (a <= b && b <= c) then return concat('["', a, '","', b , '","', c , '"]'); elseif (b <= a && a <= c) then return concat('["', b, '","', a , '","', c , '"]'); elseif (c <= a && a <= b) then return concat('["', c, '","', a , '","', b , '"]'); elseif (c <= b && b <= a) then return concat('["', c, '","', b , '","', a , '"]'); elseif (a <= c && c <= b) then return concat('["', a, '","', c , '","', b , '"]'); elseif(b <= c && c <= a) then return concat('["', b, '","', c , '","', a , '"]'); end if; END
然后就可以更新了:
update table_name set values = sort_col(values);
(上面的函数假设了数字都是3位,不用直接用哦)
MySQL 5.7支持JSON了,把字段转成JSON也许可以。
表设计的的时候就应该保证这个值的原子性、这是设计上的失误,mysql不会为这种失误出解决方案吧
靠mysql应该没什么办法,写个脚本处理下吧。
写个MySQL函数,在里面拆字符串,排序。
例如可以这样:
然后就可以更新了:
(上面的函数假设了数字都是3位,不用直接用哦)
MySQL 5.7支持JSON了,把字段转成JSON也许可以。
表设计的的时候就应该保证这个值的原子性、这是设计上的失误,mysql不会为这种失误出解决方案吧
靠mysql应该没什么办法,写个脚本处理下吧。