问题描述
SELECT substr(...,10,6) as X
如果我使用cursor.getInt(...)
,我会得到1048(“错误”值)
如果我使用cursor.getString(...)
,我会得到"002030"
(正确)。
那么,什么使sqlite将“ 002030”解析为1048?
我是否必须将其获取为字符串并每次都自己解析?
谢谢。
解决方法
函数substr()
返回一个字符串,因此您应使用cursor.getString()
检索值,该值将返回正确的结果。
如果希望结果为整数,则必须在sql代码中将其转换为显式:
SELECT cast(substr(...,10,6) as integer) as X
或隐式:
SELECT substr(...,6) + 0 as X
结果将是整数2030
,前导0
不存在。
对于您得到的奇怪的1048
,Java将以0
开头的数字文字视为octal数字,因此:
int x = 002030;
将1048
分配给x
,这是八进制数2030
的十进制表示形式。