1.⏰问题引入
在Xml文件的执行方法中,抛出错误
Cannot determine value type from string ‘1,000.00’
执行的映射方法是
<select id="xxxxxxx" resultType="com.xxx.xxx.xxx">
select
...省略
...
CONCAT(FORMAT(snp, 2)) AS snp
...省略
...
from srm_pur
<where>
...省略
...
</where>
</select>
通过Debug,发现执行到数据表的一条snp字段值为1000.00时就会报次错误。已知snp在数据量中的数据类型是float,后端实体类映射类型是Bigdecimal。
CONCAT(FORMAT(snp, 2)) AS snp
FORMAT()函数用于格式化数字,保留两位小数点,concat负责拼接字符串。
2.🌊错误原因
通过查找资料才发现,Format这个函数有大坑!!!!
在MySQL中,FORMAT 函数通常使用逗号(,)作为千位分隔符,而小数点(.)用于表示小数部分。因此,当你使用 FORMAT 函数格式化一个数字时,小数点可能会被替换为逗号。
例如,如果你格式化数字 4000000,MySQL的 FORMAT 函数可能会返回 ‘4,000,000.00’,其中逗号被用作千位分隔符,小数点用于表示小数部分。
3.🔑解决方法
知道错误原因后,问题就迎刃而解了,我们只需要将Format函数转换后的snp中的逗号替换成空字符串。代码如下:
CONCAT(REPLACE(FORMAT(snp, 2), ',', '')) AS snp