SQLite SELECT * FROM命令不适用于10的值

时间:2013-08-24 13:31:07

标签: android sql database sqlite

我有一个SQLite问题。

我有一个text not nullLAST_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:(

1 个答案:

答案 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 演示