SQLite去除nvarchar列末尾.0小数位问题求助
解决SQLite中去除nvarchar列末尾.0的问题
嘿,我明白你遇到的麻烦了——用CAST转int报错,是因为你的列是字符串类型,可能存在没法直接转成整数的内容,或者转换过程中触发了SQLite的类型转换限制。不过没关系,咱们换个思路,直接从字符串层面处理,精准去掉末尾的.0,完全不用碰数值转换,这样就不会报错啦!
下面给你两个实用的方法:
方法一:条件判断+字符串截取(兼容性最好)
这个方法不需要依赖正则,所有SQLite版本都支持,而且能精准只处理末尾是.0的字符串,不会影响其他带小数的内容(比如123.45会保持原样):
SELECT CASE WHEN your_column LIKE '%.0' THEN SUBSTR(your_column, 1, LENGTH(your_column) - 2) ELSE your_column END AS cleaned_column FROM data;
原理很简单:先检查字符串是不是以.0结尾,如果是,就截取掉最后两个字符(也就是.0);如果不是,就返回原字符串。
方法二:正则表达式替换(更简洁)
如果你的SQLite环境支持正则表达式(Aqua Data Studio通常会启用这个功能),可以用REGEXP_REPLACE一步到位:
SELECT REGEXP_REPLACE(your_column, '\.0$', '') AS cleaned_column FROM data;
这里的正则\.0$专门匹配字符串末尾的.0,把它替换成空字符串,效果和方法一完全一样,但代码更短。
如果要更新表中的数据
要是你想直接把表中的数据改成清理后的样子,而不是只查询结果,可以用下面的UPDATE语句:
UPDATE data SET your_column = CASE WHEN your_column LIKE '%.0' THEN SUBSTR(your_column, 1, LENGTH(your_column) - 2) ELSE your_column END WHERE your_column LIKE '%.0';
加个WHERE条件能只修改需要处理的行,提升效率。
为什么之前的CAST会报错?大概率是因为你的nvarchar列里,有些值看起来像数字,但实际可能包含空格、特殊字符,或者存在隐形格式问题。用字符串处理的方法就完全避开了这些问题,只针对末尾的.0动手。
内容的提问来源于stack exchange,提问作者J.M.
相关产品推荐
相关产品推荐

