记录一下mysql8对带单位的单元格进行

需求 TC1 内容类似 10L/5L 这样 需要将其拆分 使TC14为TC1 "/"后的内容 TC15为TC1的"/" 左边减去右边 数据库为mysql8 修改语句如下:

首先修改所有的 因为结果为整数 会导致有小数的行数据错误

update T_TABLE_TEST a
set
    `TC14` = SUBSTRING_INDEX(a.TC1, '/', -1),
    `TC15` = concat(
            TRUNCATE(   (
                                cast(SUBSTRING_INDEX(SUBSTRING_INDEX(a.TC1, '/', 1), REGEXP_SUBSTR(SUBSTRING_INDEX(a.TC1, '/', 1), '[^0-9.]'), 1) as DECIMAL(10,2))

                                -
                                cast(SUBSTRING_INDEX(SUBSTRING_INDEX(a.TC1, '/', -1), REGEXP_SUBSTR(SUBSTRING_INDEX(a.TC1, '/', -1), '[^0-9.]'), 1) as DECIMAL(10,2))

                            ) , 0)



        , TRIM(REGEXP_SUBSTR(SUBSTRING_INDEX(a.TC1, '/', 1), '[^0-9]+$'))  )
where
        CREATEDTIME > '2023-06-12';

然后修改有小数的 约定列中所有小数最多1位 语句如下

update T_TABLE_TEST a
set
    `TC14` = SUBSTRING_INDEX(a.TC1, '/', -1),
    `TC15` = concat(
            (
                    cast(SUBSTRING_INDEX(SUBSTRING_INDEX(a.TC1, '/', 1), REGEXP_SUBSTR(SUBSTRING_INDEX(a.TC1, '/', 1), '[^0-9.]'), 1) as DECIMAL(10,1))

                    -
                    cast(SUBSTRING_INDEX(SUBSTRING_INDEX(a.TC1, '/', -1), REGEXP_SUBSTR(SUBSTRING_INDEX(a.TC1, '/', -1), '[^0-9.]'), 1) as DECIMAL(10,1))

                )



        , TRIM(REGEXP_SUBSTR(SUBSTRING_INDEX(a.TC1, '/', 1), '[^0-9.]+$'))  )
where
        CREATEDTIME > '2023-06-12'
and a.TC1 REGEXP '\\.[0-9]+'
    ;

修改tc1

 

update T_TABLE_TEST a
set
    `TC1` = SUBSTRING_INDEX(a.TC1, '/', 1)

where
        CREATEDTIME > '2023-06-12';

你可能感兴趣的:(mysql)