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应该没什么办法,写个脚本处理下吧。