Не удалось получить отформатированную дату из базы данных sqlite - PullRequest
0 голосов
/ 10 июня 2018

У меня есть таблица со столбцом отметки времени, и значения, хранящиеся в столбце отметки времени, имеют видполучить метку времени в формате " ГГГГ-ММ-дд ".

Используется функция strftime (), но не используется

при запросе strftime ('% Y-% m-% d% H:% M', отметка времени) null

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Ваша проблема в том, что 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

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

Строки времени Строка времени может иметь любой из следующих форматов:

  1. ГГГГ-ММ-ДД
  2. ГГГГ-ММ-ДД ЧЧ: ММ
  3. ГГГГ-ММ-ДД ЧЧ: ММ: СС
  4. ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС
  5. ГГГГ-ММ-ДДЧЧ:ММ
  6. ГГГГ-ММ-ДДЧЧ: ММ: СС
  7. ГГГГ-ММ-ДДТЧЧ: ММ: СС.ССС
  8. ЧЧ: ММ
  9. ЧЧ:ММ: СС
  10. ЧЧ: ММ: СС.ССС
  11. сейчас
  12. 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 - функции даты и времени

0 голосов
/ 10 июня 2018

Это не один из поддерживаемых форматов строки времени .Измените значения, чтобы они содержали соответствующую пунктуацию:

sqlite> SELECT date('20180608T002304.507Z');

sqlite> SELECT date('2018-06-08T00:23:04.507Z');
2018-06-08
...