我有一个SQLite问题。
我有一个text not null
列LAST_COLUMN
,其中我将数字存储为文本。如果该数字为10,则不会检索该列!忘记Android代码,我使用了一个SQLite浏览器来发出SELECT * FROM的命令,它没有得到值为10的列。如果它是9,11,20或240,它确实得到它们。这个问题在我的Android代码中也给我带来了问题。
我使用SQLite命令
SELECT * FROM TABLE_NAME WHERE LAST_COLUMN = '10'
。知道问题可能是什么?
感谢。
编辑:好的,问题不在于数字10,而在于我编写的SQLite数据库。无论我做什么,即使最后一列中的数字看起来像它们应该是什么,SQLite命令也不会认识到这一点。 WTH:(
答案 0 :(得分:0)
在这种情况下,通常意味着您的“行为不端”值(在您的情况下为10
)中有前导/尾随空格。
您可以通过查询找到所有这些“坏”记录
SELECT *
FROM Table1
WHERE LENGTH(last_column) <> LENGTH(TRIM(last_column))
这是 SQLFiddle 演示
显然,您可以通过简单的更新修复它们
UPDATE Table1
SET last_column = TRIM(last_column)
WHERE LENGTH(last_column) <> LENGTH(TRIM(last_column))
这是 SQLFiddle 演示
如果您需要处理\r
,\n
,\t
等特殊字符,则可以使用REPLACE()
和/或TRIM(X,Y)
SELECT *
FROM Table1
WHERE LENGTH(last_column) <>
LENGTH(TRIM(REPLACE(REPLACE(REPLACE(last_column, x'0900',''), x'0D00', ''), x'0A00', '')))
修复删除这些特殊字符的值
UPDATE table1
SET last_column = TRIM(REPLACE(REPLACE(REPLACE(last_column, x'0900',''), x'0D00', ''), x'0A00', ''))
WHERE LENGTH(last_column) <>
LENGTH(TRIM(REPLACE(REPLACE(REPLACE(last_column, x'0900',''), x'0D00', ''), x'0A00', '')))
这是 SQLFiddle 演示