Можно использовать SQL ОБНОВЛЕНИЕ, например: -
UPDATE mytable SET mycolumn =
CASE WHEN substr(mycolumn,3,1) = '/'
THEN
strftime('%s',substr(mycolumn,7,4)||'-'||substr(mycolumn,4,2)||'-'||substr(mycolumn,1,2)||' '||substr(mycolumn,12,8))
ELSE
mycolumn
END
;
.
Пример
Возможно, рассмотрим следующее, которое преобразует столбец (или нет, если онуже был преобразован (или нет, если он не соответствует формату дд / мм / гггг))
- Обратите внимание, что ниже просто проверяется 3-й символ для / , более строгогопроверка может быть использована при желании.
: -
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (mycolumn TEXT);
/* Load the testing data */
INSERT INTO mytable VALUES
('11/08/2019 00:00:00'),
('01/08/2019 00:00:00'),
('31/01/2019 00:00:00'),
('31/01/2019 13:25:33.004') /* test for micro seconds (dropped by utc)*/;
/* display data before conversion */
SELECT * FROM mytable;
/* Convert the data to unix */
UPDATE mytable SET mycolumn =
CASE WHEN substr(mycolumn,3,1) = '/'
THEN
strftime('%s',substr(mycolumn,7,4)||'-'||substr(mycolumn,4,2)||'-'||substr(mycolumn,1,2)||' '||substr(mycolumn,12,8))
ELSE
mycolumn
END
;
/* Display data as is, as formatted localised and as formatted UTC */
SELECT *, datetime(mycolumn,'unixepoch','localtime') AS local, datetime(mycolumn,'unixepoch') AS utc FROM mytable;
Обратите внимание, что вышеприведенное НЕ будет обслуживать такие даты, как 01.01.2009, напримердля дат потребуется более сложное предложение CASE.
Обратите внимание, что UTC - это всемирное координированное время, т.е. сохраняется одно значение, которое вы настраиваете из UTC в соответствии с часовым поясом
Результаты
- Примечание тестирование в часовом поясе, который составляет +10 часов
При первом запуске результаты: -
Предварительное преобразование:-
Post-convserion
Rerun (DROP прокомментировалушел)
Предварительное преобразование (смешанные данные): -
Сообщение-конверсия: -