Я искал изменить свой формат Order_Date
на существующие данные.
У меня есть 3000+ строк в моей SQLite
данных SQLite
.
Я хочу обновить все строки из этого формата. 29/09/2018 1:03:44 AM
к этому yyyy-MM-dd HH:mm
есть ли способ сделать это?
My Order_Date
Column Order_Date
данных - TEXT
До сих пор я пытался
UPDATE Orders SET Order_Date = strftime(Order_Date, '%Y-%M-%d %H:%m')
Но приведенный выше запрос обновил все строки до нуля
Всего 2 ответа
Я считаю, что это может подойти.
UPDATE ORDERS
SET order_date =
CASE
WHEN length(order_date) = 21 AND substr(order_date,20,2) = 'AM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||Ɔ'||substr(order_date,12,4)
WHEN length(order_date) = 21 AND substr(order_date,20,2) = 'PM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||CAST(CAST(substr(order_date,12,1) AS INTEGER) + 12 AS TEXT)||substr(order_date,13,3)
WHEN length(order_date) = 22 AND substr(order_date,21,2) = 'AM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||substr(order_date,12,5)
WHEN length(order_date) = 22 AND substr(order_date,21,2) = 'PM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||CAST(CAST(substr(order_date,12,2) AS INTEGER) + 12 AS TEXT)||substr(order_date,14,3)
END
;
Это относится к переменной длине из-за часа, составляющего 1 или 2 цифры. Однако он не справился бы, если бы день был также 1 цифрой, когда он меньше 10.
Внедрение этого теста в соответствии с: -
DROP TABLE IF EXISTS orders;
CREATE TABLE IF NOT EXISTS orders (order_date TEXT);
INSERT INTO orders VALUES
(ཙ/09/2018 1:03:44 AM'),
(ཙ/09/2018 1:03:44 PM'),
(ཙ/09/2018 11:03:44 AM'),
(ཙ/09/2018 11:03:44 PM');
UPDATE ORDERS
SET order_date =
CASE
WHEN length(order_date) = 21 AND substr(order_date,20,2) = 'AM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||Ɔ'||substr(order_date,12,4)
WHEN length(order_date) = 21 AND substr(order_date,20,2) = 'PM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||CAST(CAST(substr(order_date,12,1) AS INTEGER) + 12 AS TEXT)||substr(order_date,13,3)
WHEN length(order_date) = 22 AND substr(order_date,21,2) = 'AM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||substr(order_date,12,5)
WHEN length(order_date) = 22 AND substr(order_date,21,2) = 'PM' THEN
substr(order_date,7,4)||'-'||substr(order_date,4,2)||'-'||substr(order_date,1,2)||' '
||CAST(CAST(substr(order_date,12,2) AS INTEGER) + 12 AS TEXT)||substr(order_date,14,3)
END
;
SELECT * FROM orders;
Результаты в: -
Мои предположения: год составляет 4 цифры и каждый месяц, день, час, минуты 2 цифры.
Я тестировал приведенный ниже код и, похоже, работает:
UPDATE Orders
SET Order_Date =
substr(datetime(substr(Order_Date, 7, 4) || '-' || substr(Order_Date, 4, 2) || '-' || substr(Order_Date, 1, 2) || ' '
|| substr(Order_Date, 12, 2) || ':' || substr(Order_Date, 15, 2),
'+' ||
CASE substr(Order_Date, length(Order_Date)-1)
WHEN 'PM' THEN '
ELSE Ɔ'
END
|| ' hours'), 1, 16)