2012-07-27 59 views
1

我檢查Graphserver的代碼並存在打算找兩個字段的最大值和最小值的一些SQLite的命令:SQLite的MIN()和MAX()的字符串(memcmp比較)

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

start_date和end_date的格式類似於YYYYMMDD,它看起來並不是SQLite在http://www.sqlite.org/lang_datefunc.html中識別的格式之一。 min()和max()記錄在這裏http://www.sqlite.org/lang_corefunc.html表示二進制整理函數用於比較。這裏(http://www.sqlite.org/datatype3.html#collation)它說memcmp()用於比較。那麼它只是比較ascii數字上字符串的開頭字節呢?我不確定什麼是memcmp。所以假設20120506小於20120507,並且由於ascii中的6是54,而ascii是7,所以20120507更大?

回答

0

事實上,您的日期以SQLite日期和時間函數無法使用的格式存儲,與minmax函數對它們的操作方式無關。

你的問題的答案是肯定的,如果你的日期被SQLite視爲字符串。如果您將日期存儲爲YYYYMMDD,那麼根據您的列定義,您的日期實際上可能會被視爲數字,因此如此比較。

欲瞭解更多信息,請閱讀data types,更具體地說是關於type affinity

+0

我的情況是列是TEXT。但當然他們都是數字。 – huggie 2012-07-30 13:08:35