我不得不做一些工作,我正在与之交互并创建由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()'是格式化函数,不是转换函数。所以当你想将你传递的任何值转换成日期和时间的特定字符串表示时,你可以使用它。 –