代码之家  ›  专栏  ›  技术社区  ›  Ahmed Zafar

SQLite SELECT*FROM命令对值10无效

  •  0
  • Ahmed Zafar  · 技术社区  · 11 年前

    我有一个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命令都无法识别这一点。重量?:(

    1 回复  |  直到 11 年前
        1
  •  0
  •   peterm    11 年前

    在这种情况下,这通常意味着你的“不当行为”价值观(在你的情况下 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 演示