Мне нужно выполнить некоторую работу, где я взаимодействую и создаю таблицы, которые управляются библиотекой SQLite.net. Мне нужно иметь возможность создавать таблицы, которые другая программа не будет знать, что она сама не создала.Что такое столбец типа datetime в SQLite?
Рассматривая некоторые схемы и чувствуя, как это создает вещи, я заметил что-то странное. Когда я прочитал около SQLite's data types, я вижу, что это небольшой список, и изначально он выглядел мне как если бы я хотел сохранить дату/время, мне нужно убедиться, что я использую специальные функции в запросах SELECT/INSERT/UPDATE, а столбец может быть TEXT или INTEGER или REAL. Если я где-то забуду функцию datetime(), я ожидаю получить что-то обратно, что не то, что я хотел (за исключением, может быть, столбца TEXT.)
Итак, я смотрю схему для одной из таблиц, и я вижу это в колонках:
"LastUpdated" datetime ,
Uhh, OK. 'datetime' не является типом. Или это? Правила 'type affinity' указывают, что '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
Uhhh ... ОК. Это имело бы смысл, если бы это был столбец ТЕКСТ, я думаю. Поэтому я составил тестовый стол:
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
Ох. Подождите. Является ли ответ на что-то вроде: «Вы не используете datetime() в запросе INSERT»? – OwenP
@OwenP 'datetime()' является функцией форматирования, а не функцией преобразования. поэтому вы будете использовать его, когда хотите преобразовать любое значение, которое вы передаете, в конкретное строковое представление даты и времени. –