需求 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';