我在SQLite的表F中有一个类型为REAL的列C.我希望在其他表格的任何地方加入F的负值(以及其他一些字段)。
然而-C或0-C等都返回C的舍入值,例如当C包含“123,456”时,则-C返回“-123”。
我应该首先通过字符串转换它还是语法不同?
答案 0 :(得分:1)
看起来,
中的123,456
是小数点分隔符,但SQLite将整个事物视为字符串(即'123,456'
而不是123.456
)。请记住,SQLite的类型系统与SQL values have types but columns don't:
[...]在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联。 [...]
所以你可以悄悄地将一个字符串(在某些语言环境中看起来像一个实数)放入一个真正的列中,直到以后才会发生任何不好的事情。
您可以在数据进入SQLite之前修复导入过程以根据需要解释小数点分隔符,或者您可以根据需要使用replace
进行修复:
sqlite> select -'123,45';
-123
sqlite> select -replace('123,45', ',', '.');
-123.45