0

我有一个 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?:(

4

1 回答 1

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

于 2013-08-24T18:40:54.550 回答