mysql 查询排名 返回值拼接的骚操作

故事背景:

依照原系统的框子搞一个新的系统给其他人使用,因为新的系统配置库依然需要使用原有的表,表中有字段区分新的系统,然后就有了这个很没劲的数据同步。

难点:配置库码表数据的主键之前是自增,后来改造改成18位有意义的字符序列,但是由于部分小哥哥小姐姐不按照规范写,导致表中主键有部分数据是前几位一样,有的是后几位一样。

数据同步方案一:

使用截取原有主键一部分,再在其前面拼接上日期入表 (有主见冲突),本来规定的就是年份+日期+各组编号+个人编号+000三位的扩展,脚本写完执行时发现数据完全不是那么回事,有很多就是前面改一位,其他不动。。。

INSERT INTO t_test (
    SELECT
        CONCAT(
            '1901',

        IF (
            length(col1) > 12,
            RIGHT (col1, 12),
            col1
        )
        ) col1,
        col2,
        col3
    FROM
        t_test
);

当 col1的长度大于12时,保留后面的12位,前拼接1901 当不大于12时 1901直接拼接原来的数据 防止主键长度超过限制长度

数据同步方案二:同步数据按顺序造新的主键  本次同步数据总量5000+ 所以最长数据后面会有4位数据 前面安装原有主键生成策略 往上凑 

INSERT INTO t_test (
    SELECT
        CONCAT(
            '1901071530044',
            @rownum :=@rownum + 1
        ) col1,
        col2,
        col3,
        CONCAT(id, 'aa')
    FROM
        t_test,
        (SELECT @rownum := 0) r
);

这样其实主键的长度就会不一致,由于是拼接上去的主键长度不一样长所以还是有点问题的 不过测试人员说可以了就这样搞... GG不GG

原文地址:https://www.cnblogs.com/zhaiyt/p/10234870.html