3

私はデータベース以外の出身です。フィールドデータ型TEXTの1つでテーブルを作成しました。

dataF TEXT

挿入:

値を持つ3つのレコードを挿入しました:

'842-2-4'
'842-2-5'
'842-2-6'

選択:

今すぐ日付に基づいてレコードを取得するためにTring。

... where dateF between '842-2-4' and '842-2-10'

失敗します。

一方、

... where dateF between '842-2-4' and '842-2-8'

3つのレコードすべてを取得します。

私は何が間違っているのですか?なぜ最初のステートメントが失敗するのですか?

親切に提案します。

4

2 に答える 2

3

日付ではなく文字列を比較しているためです。コンピューターは、これらが日付であることを認識していません。日付として保存して日付比較を行うか、独自のロジックを実装して文字列を分析する必要があります。

簡単に言えば、10分の1は、10が多いのではなく、値よりも少ないと見なしています。日付ではなく、文字列の比較です。

sqliteは日付タイプをサポートしていませんが、それらを処理するための関数を持っています。ここを参照してください:

http://www.sqlite.org/lang_datefunc.html

于 2012-11-28T13:56:38.430 に答える
1

文字列を比較する場合、値は左から右に比較されます...

一方の文字列はもう一方の文字列よりも短いので、これを比較しているようなものです...

'842-2-4'
'842-2-1'

まあ、何も>= '842-2-4'ANDではありません<= '842-2-1'

  • '842-2-1'前に来るので'842-2-4'
  • そして、そう、'842-2-10'前にも来'842-2-4'ます。

  • 前と同じよう'Squiggled''Squiggly'

  • そして'xxx-y-az'前に来るように'xxx-y-z'


必要に応じて比較するには、すべての日付に「」が埋め込まれていることを確認してください0

BETWEEN '0842-02-04' AND '0842-02-10'

ただし、これは、テーブルの値をパディングした後でのみ機能します。


編集

また、これはフォーマットが。であることを前提としていることに注意してくださいYYYY-MM-DD。文字列は左から右に比較されるため、左側に最大のマグニチュード値が必要です。

(これは、ネイティブの文字列比較を使用できず、希望どおりに動作させることができないことを意味します。)YYYY-DD-MM

于 2012-11-28T14:03:30.223 に答える