Ваша проблема в том, что strftime
вместе со всеми функциями даты SQLite требуют определенных форматов, как указано ниже.20180608T002304.507Z не является одним из форматов, поэтому имеет значение null.
- Примечание следующее основано на вашем запросе с использованием strftime ('% Y-% m-% d% H:% M ', отметка времени) вместо Я хотел бы получить отметку времени в формате "YYYY-MM-dd".
У вас естьдва варианта.
1.Вы можете использовать функцию substr
, например
: -
substr(mytimestamp,1,4)||'-'||
substr(mytimestamp,5,2)||'-'||
substr(mytimestamp,7,2)||' ' ||
substr(mytimestamp,10,2)||':'||
substr(mytimestamp,12,2)
- , где mytimestamp - это имя столбца
Например, следующее: -
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (mytimestamp);
INSERT INTO mytable VALUES('20180608T002304.507Z'),('20180608T001745.821Z'),('20180608T001628.170Z'),('20180608T001336.516Z');
SELECT
substr(mytimestamp,1,4)||'-'||
substr(mytimestamp,5,2)||'-'||
substr(mytimestamp,7,2)||' ' ||
substr(mytimestamp,10,2)||':'||
substr(mytimestamp,12,2)
FROM mytable;
приводит к: -
![enter image description here](https://i.stack.imgur.com/MEQ5S.jpg)
2.Измените исходные данные, чтобы они соответствовали одному из приемлемых / распознанных форматов.
Это можно сделать, используя что-то на основе: -
UPDATE mytable SET mytimestamp =
substr(mytimestamp,1,4)||'-'|| -- Year
substr(mytimestamp,5,2)||'-'|| -- Month
substr(mytimestamp,7,2)|| -- Day
substr(mytimestamp,9,1)|| -- T (or space)
substr(mytimestamp,10,2)||':'||
substr(mytimestamp,12,2)||':'||
substr(mytimestamp,14)
;
- Это основано на таблице, которая была созданавыше.
После запуска обновления с использованием: -
SELECT strftime('%Y-%m-%d %H:%M', mytimestamp) FROM mytable;
результаты: -
![enter image description here](https://i.stack.imgur.com/6X13Z.jpg)
Строки времени Строка времени может иметь любой из следующих форматов:
- ГГГГ-ММ-ДД
- ГГГГ-ММ-ДД ЧЧ: ММ
- ГГГГ-ММ-ДД ЧЧ: ММ: СС
- ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС
- ГГГГ-ММ-ДДЧЧ:ММ
- ГГГГ-ММ-ДДЧЧ: ММ: СС
- ГГГГ-ММ-ДДТЧЧ: ММ: СС.ССС
- ЧЧ: ММ
- ЧЧ:ММ: СС
- ЧЧ: ММ: СС.ССС
- сейчас
- DDDDDDDDDD
В форматах с 5 по 7 буква "Т" равнабуквальный символ, разделяющий дату и время, как того требует ISO-8601.Форматы с 8 по 10, которые указывают только время, предполагают дату 2000-01-01.Формат 11, строка «сейчас», преобразуется в текущую дату и время, полученные из метода xCurrentTime используемого объекта sqlite3_vfs.Аргумент «сейчас» для функций даты и времени всегда возвращает одно и то же значение для нескольких вызовов в рамках одного вызова sqlite3_step ().Всемирное координированное время (UTC).Формат 12 - это число юлианского дня, выраженное в виде значения с плавающей запятой.
Форматы 2–10 могут опционально сопровождаться указателем часового пояса в форме «[+ -] ЧЧ: ММ» или просто «Z».Функции даты и времени внутренне используют время UTC или «зулу», поэтому суффикс «Z» не используется.Любой ненулевой суффикс "ЧЧ: ММ" вычитается из указанной даты и времени для вычисления времени зулуса.Например, все следующие временные строки эквивалентны:
- 2013-10-07 08: 23: 19.120
- 2013-10-07T08: 23: 19.120Z
- 2013-10-07 04: 23: 19.120-04: 00
- 2456572.84952685
В форматах 4, 7 и 10 значение SS.SSS в долях секунды можетиметь одну или несколько цифр после запятой.Точно три цифры показаны в примерах, потому что только первые три цифры имеют значение для результата, но входная строка может иметь меньше или больше трех цифр, и функции даты / времени все равно будут работать правильно.Точно так же формат 12 показан с 10 значащими цифрами, но функции даты / времени будут действительно принимать столько цифр, сколько необходимо для представления числа юлианского дня.
SQL AsРазбирается по SQLite - функции даты и времени