MySQL中如何将JSON子值转换为整数?
解决JSON_SET更新后数值为double类型的问题
你当前的问题出在直接对JSON提取的值做乘法运算后,结果默认是浮点数,导致JSON_SET将其存为double类型。而你尝试的CAST写法存在语法错误——->>操作符右侧只能是JSON路径字符串,不能直接跟CAST表达式。
正确的写法是先提取JSON值,再对计算结果做类型转换,把结果转为整数后传入JSON_SET:
UPDATE {$table} SET {$column} = JSON_SET( {$column}, '$.{$jsonKey}', CAST( ({$column}->>'$.{$jsonKey}') * 100 AS UNSIGNED ) )
如果你的数值可能包含负数,可以把UNSIGNED换成SIGNED:
UPDATE {$table} SET {$column} = JSON_SET( {$column}, '$.{$jsonKey}', CAST( ({$column}->>'$.{$jsonKey}') * 100 AS SIGNED ) )
原理很直白:{$column}->>'$.{$jsonKey}'提取出JSON中的值,乘以100后通过CAST转为整数类型,此时JSON_SET会识别这个整数类型,将其以整数格式存入JSON字段,而非浮点数。
内容的提问来源于stack exchange,提问作者online Thomas
相关产品推荐
相关产品推荐

