Добавление часов к столбцу меток времени в Sqlite приводит к NULL. Почему? - PullRequest
0 голосов
/ 08 марта 2019

Я получаю NULL (ничего) от:

ВЫБРАТЬ ДАННЫЙ (ServiceCall_CreatedOn, '- 6 часов') AS 'Служба создана:' ...

Где ServiceCall_CreatedOn - текстовый столбец Sqlite, содержащий: «2019-01-20 4:48:11» (без кавычек конечно)

Следующее:

SELECT ServiceCall_CreatedOn AS 'Служба создана:' ...

и следующие

ВЫБРАТЬ ДАТИЮ ('2019-01-20 4:48:11', '- 6 часов') AS 'Служба создана:' ...

делай работу !!!!!

Почему вычитание времени SQLite DATETIME работает с литералом даты, а не со столбцом ServiceCall_CreatedOn? Какое может быть решение?

Problem in one picture

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Я считаю, что ваша проблема в том, что у вас неправильный формат, поскольку вы используете 1 цифру для часа, а не для двух.

То есть

SELECT DATETIME('2019-01-20 4:48:11','-6 hours') AS 'Service Created On:' 

возвращает ноль, а

SELECT DATETIME('2019-01-20 04:48:11','-6 hours') AS 'Service Created On:' 

возврат 2019-01-19 22: 48: 11

, например

SELECT 
    DATETIME('2019-01-20 4:48:11','-6 hours') AS 'Service Created On: Version1',
    DATETIME('2019-01-20 04:48:11','-6 hours') AS 'Service Created On: Version2'
;

результат в

enter image description here

1 голос
/ 08 марта 2019

SQLite распознает определенные форматы даты и времени, как вы можете видеть здесь .Формат в вашем случае не один из них.Поэтому вам нужно переформатировать значения столбца ServiceCall_CreatedOn следующим образом:

SELECT DATETIME(
  case when ServiceCall_CreatedOn like '% _:%' 
    then replace(ServiceCall_CreatedOn, ' ', ' 0') 
    else ServiceCall_CreatedOn 
  end,'-6 hours'
)

Это не элегантно, но работает, добавляя 0 перед цифрой часа только при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...