SQLite - метка времени на сегодняшний день - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь преобразовать метку времени в дату в SQLite.

Но это всегда возвращает мне Null, я пытаюсь найти много решений, но любое решение мне подходит

Вот мой запрос: image

Вот мой SQL скрипт, если вы хотите попробовать:

CREATE TABLE Appointments (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    fromDateTime TIMESTAMP NOT NULL,
    toDateTime TIMESTAMP NOT NULL,
    name VARCHAR(30) NOT NULL,
    description VARCHAR(200),
    type VARCHAR(50)
);

Insert INTO Appointments ( fromDateTime, toDateTime, name, description ) VALUES
('21/03/2020 15:00:00', '21/03/2020 16:00:00', 'Test', 'Test Description'), 
('22/03/2020 15:00:00', '22/03/2020 16:00:00', 'Test 2', 'Test 2 Description'),    
('22/03/2020 16:00:00', '22/03/2020 17:00:00', 'Test 2', 'Test 2 Description'),    
('22/03/2020 17:00:00', '22/03/2020 18:00:00', 'Test 2', 'Test 2 Description'),           
('21/03/2020 00:00:00', '25/03/2020 23:59:59', 'Test', 'Test Description'),      
('27/03/2020 08:00:00', '21/03/2020 12:00:00', 'Test', 'Test Description'),
('02/03/2020 08:00:00', '10/03/2020 12:00:00', 'Joelle', 'Test Joelle');

1 Ответ

0 голосов
/ 22 марта 2020

Чтобы расширить комментарий @forpas, SQLite не имеет типа данных TIMESTAMP, поэтому при вставке значений в столбцы fromDateTime и toDateTime они преобразуются в один из классов хранения данных 5 SQLite. : NULL, INTEGER, REAL, TEXT, BLOB. Поскольку в INSERT ошибки нет, создается впечатление, что SQLite распознал значение как метку времени, хотя на самом деле это значение было обработано как TEXT. Теперь, чтобы использовать эти значения в любой из функций Дата и Время SQLite, они должны быть либо ISO-8601 совместимой строкой, словом now, либо числом (интерпретируемым либо как число в юлианских днях, либо как Unix отметка времени зависит от контекста). Итак, вам нужно изменить время на формат YYYY-MM-DD hh:mm:ss, т.е.

Insert INTO Appointments ( fromDateTime, toDateTime, name, description ) VALUES
('2020-03-21 15:00:00', '2020-03-21 16:00:00', 'Test', 'Test Description'), 
('2020-03-22 15:00:00', '2020-03-22 16:00:00', 'Test 2', 'Test 2 Description'),    
('2020-03-22 16:00:00', '2020-03-22 17:00:00', 'Test 2', 'Test 2 Description'),    
('2020-03-22 17:00:00', '2020-03-22 18:00:00', 'Test 2', 'Test 2 Description'),           
('2020-03-21 00:00:00', '2020-03-25 23:59:59', 'Test', 'Test Description'),      
('2020-03-27 08:00:00', '2020-03-21 12:00:00', 'Test', 'Test Description'),
('2020-03-02 08:00:00', '2020-03-10 12:00:00', 'Joelle', 'Test Joelle');

Обратите внимание, что datetime просто вызывается со столбцом в качестве параметра и возвращает строку в формате ISO-8601. Чтобы получить формат YYYY-MM-DD, вам также необходимо использовать strftime. Таким образом, ваш запрос становится:

SELECT strftime('%d - %m - %Y', fromDateTime) AS y,
       strftime('%Y-%m-%d', fromDateTime) AS x
FROM Appointments

И вывод:

y               x
21 - 03 - 2020  2020-03-21
22 - 03 - 2020  2020-03-22
22 - 03 - 2020  2020-03-22
22 - 03 - 2020  2020-03-22
21 - 03 - 2020  2020-03-21
27 - 03 - 2020  2020-03-27
02 - 03 - 2020  2020-03-02

Демо на dbfiddle

...