我不得不做一些工作,我正在與之交互並創建由SQLite.net庫操縱的表格。我需要能夠創建表,其他程序不會知道它沒有創建它自己。什麼是SQLite中的datetime-type列?
雖然看了一些模式,並感覺它是如何創造的東西,我注意到一些奇怪的東西。當我讀到SQLite's data types時,發現它是一個小列表,最初它看起來像是我想存儲日期/時間,我需要確保在SELECT/INSERT/UPDATE查詢中使用特殊函數,而列可以是TEXT或INTEGER或REAL。如果我在某處忘記了datetime()函數,我希望得到的東西不是我想要的東西(除了可能是TEXT列)。
因此,我正在查看其中一個表的模式,我在列中看到:
"LastUpdated" datetime ,
呃,好的。 'datetime'不是一種類型。或者是? '類型親和性'規則表明'datetime'是一個有效的類型說明符,將被視爲NUMERIC。好吧,那裏沒有任何東西。我試着查詢:
sqlite> select datetime(LastUpdated) from Foo;
2016-01-06 15:37:36
這很有道理。我敢打賭,如果我忘記了datetime()函數,我會得到一些愚蠢的東西,對吧?
sqlite> select datetime(LastUpdated) from DestinationAdapter;
2016-01-06 15:37:36
呃......好的。如果它是一個TEXT列,我想這是有道理的。所以我做了一個測試表:
sqlite> CREATE TABLE TestDateTime (
...> "Id" integer primary key autoincrement not null,
...> "Value" TEXT,
...> "ValueN" NUMERIC);
sqlite> INSERT INTO TestDateTime(Value, ValueN) VALUES (datetime('2015-01-06 10:20:30'), datetime('2015-01-06 10:20:30'));
sqlite> select * from TestDateTime;
1|2015-01-06 10:20:30|2015-01-06 10:20:30
好的。這很奇怪。看起來SQLite存儲的東西不是數據類型文檔中討論的值。無論它是什麼,它都會告訴SQLite的控制檯工具,該列中的值是日期/時間值,應該按照這樣的方式呈現。那麼究竟發生了什麼?看起來無論我分配給列的日期和時間是「正常工作」。這太神奇了,讓我感到舒服。這裏發生了什麼,以及它如何影響我如何編寫涉及日期/時間值的查詢?
好吧,這是有道理的,除了它讓我問這個問題,「那麼datetime()函數究竟是什麼,難道我不能僅僅在列中敲擊字符串? – OwenP
哦。等待。是這樣的答案:「你不在INSERT查詢中使用datetime()」? – OwenP
@OwenP'datetime()'是格式化函數,不是轉換函數。所以當你想將你傳遞的任何值轉換成日期和時間的特定字符串表示時,你可以使用它。 –