1

私はGraphserverのコードをチェックしています.2つのフィールドの最小値と最大値を見つけることを意図したいくつかのSQLiteコマンドがあります:

select min(start_date), max(end_date) from calendar

start_date と end_date は YYYYMMDD のような形式ですが、これはhttp://www.sqlite.org/lang_datefunc.htmlで SQLite によって認識される形式の 1 つではないようです。ここに記載されている min() および max() http://www.sqlite.org/lang_corefunc.htmlは、バイナリ照合関数が比較に使用されることを示しています。ここ ( http://www.sqlite.org/datatype3.html#collat ​​ion ) では、比較に memcmp() が使用されています。それで、ASCII番号の文字列の先頭からバイトごとに比較するだけですか?memcmp が何をするのかわかりません。したがって、20120506 は 20120507 よりも小さいと想定され、ASCII では 6 は 54、ASCII では 7 は 55 であるため、20120507 の方が大きいですか?

4

1 に答える 1

0

日付が SQLite の日付と時刻関数で使用できない形式で格納されているという事実は、minandmax関数がそれらに対してどのように動作するかには関係ありません。

日付が SQLite によって文字列として扱われる場合、質問に対する答えは「はい」です。日付を として保存するとYYYYMMDD、列の定義によっては、日付が実際には数値として扱われ、そのように比較される場合があります。

詳細については、データ型について、より具体的には型の親和性についてお読みください。

于 2012-07-29T13:45:38.047 に答える