1

列の1つが「TEXTNOTNULL」として定義されているSqliteデータベースがあります。一部の値は文字列であり、一部はDOUBLEにキャストでき、一部はINTEGERにケース化できます。DOUBLE値に絞り込んだら、ある範囲のデータを取得するクエリを実行したいと思います。私の列の名前が「値」であるとします。これはできますか?

SELECT * FROM Tbl WHERE ... AND Value >= 23 AND Value < 42

それはある種のASCII比較または数値比較を行うのでしょうか?INTEGERまたはREAL?BETWEENオペレーターは同じように機能しますか?

そして、これを行うとどうなりますか?

SELECT MAX(Value) FROM Tbl WHERE ...

文字列または整数または浮動小数点の比較を行いますか?

4

2 に答える 2

0

テキストを整数または倍精度に変換できないため、必要なことを行うことができません。

列が varchar の場合、次のようにすることで可能性があります。

select * 
from Tbl 
WHERE     ISNUMERIC(Value ) = 1 --condition to avoid a conversion from string to int for example
and cast(value as integer) > 1 --rest of your conditions
于 2012-05-16T16:35:35.797 に答える
0

それはすべて、Datatypes In SQLite Version 3の記事で説明されています。たとえば、質問の最初の部分の答えは

INTEGER または REAL 値は、TEXT または BLOB 値より小さいです。INTEGER または REAL が別の INTEGER または REAL と比較される場合、数値比較が実行されます。

SELECT 9 < '1'これが、と両方が(true)SELECT 9 < '11'を与える理由です。1

式「a BETWEEN b AND c」は、2 つの別個のバイナリ比較「a >= b AND a <= c」として扱われます。

知っておくべき最も重要な点は、列の型は単なる注釈であるということです。SQLite は動的に型付けされるため、各値は任意の型を持つことができます。

于 2012-05-16T16:43:09.570 に答える