2012-04-30 44 views
2

這是爲什麼SELECT劃時代的時間戳更大然後我的變量

SELECT strftime('%s', timestamp,'localtime') from locationLog WHERE strftime('%s', timestamp,'localtime') > 999999999999999999 ORDER BY _id DESC 

返回任何輸出時,我所有的行已經在我的情況「時間戳」

較低的值上面的查詢返回

1334735588 
1334735349 
1334734317 
1334734178 
1334734172 
and so on... 

它返回我的整個表格。

如果我切換><它不返回任何內容。

我想我想比較不同類型的變量或類似的東西。

回答

1

你是一個比較text值與integer值,所以源碼鑄integertext,並執行字符串比較:

sqlite> select strftime('%s', '2002-02-02', 'localtime'); 
1012611600 
sqlite> select typeof(strftime('%s', '2002-02-02', 'localtime')); 
text 
sqlite> select typeof(999999999999999999); 
integer 
sqlite> select strftime('%s', '2002-02-02', 'localtime') > 999999999999999999; 
1 
sqlite> select cast(strftime('%s', '2002-02-02', 'localtime') as integer) > 999999999999999999; 
0 

如上圖所示,該解決方案是的strftime返回值投射到某些數字類型。

+0

我已經想出了完全相同的解決方案,但由於我的名譽低,我只能在幾個小時內回答自己。所以你打敗了時鐘。 (你也教過我關於typeof)非常感謝你的回答。 – Moop

1

猜測你是在一個32位的平臺上,而且你使用了一個大於2147483647的整數,這讓你在"Year 2038 Problem"上找到了一個變體。

嘗試使用2147483647作爲您在查詢中與之比較的數字。

這將繼續工作,直到2038,到那時,你大概會在64位平臺上託管的應用程序(或者甚至128或再256位!)