как обновить формат sqlite datetime

Я искал изменить свой формат 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)

Есть идеи?

10000