0

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 コマンドはそれを認識しません。何?:(

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、and/or\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 に答える