如何在SQLite中移除text类型num列的第一个小数点?
解决SQLite移除num列第一个小数点的问题
你的需求是把log表中num列(text类型)里的第一个小数点去掉、保留第二个。之前用REPLACE的方法会删掉所有小数点,原因是REPLACE是全局替换所有匹配字符,得换个思路——直接拆分字符串再拼接:
正确的SQL语句
SELECT num, SUBSTR(num, 1, INSTR(num, '.') - 1) || SUBSTR(num, INSTR(num, '.') + 1) AS cleaned_num FROM log;
原理说明
INSTR(num, '.')返回第一个小数点在字符串中的位置(比如1.100.00里第一个小数点在第2位)SUBSTR(num, 1, INSTR(num, '.') - 1)截取小数点前的部分(比如1)SUBSTR(num, INSTR(num, '.') + 1)截取第一个小数点之后的所有内容(比如100.00)- 用
||把两部分拼接,就得到去掉第一个小数点的结果(1100.00)
兼容无小数点的情况
如果表中存在没有小数点的行,上面的语句会报错,可以加判断处理:
SELECT num, CASE WHEN INSTR(num, '.') > 0 THEN SUBSTR(num, 1, INSTR(num, '.') - 1) || SUBSTR(num, INSTR(num, '.') + 1) ELSE num END AS cleaned_num FROM log;
内容的提问来源于stack exchange,提问作者IamBeginner
相关产品推荐
相关产品推荐

