Даты SQL и форматирование времени - PullRequest
0 голосов
/ 03 декабря 2018

получил быстрый вопрос о некотором форматировании SQL.Я пытаюсь выяснить, как сделать форматирование для таблицы одинаковым.Таблица включает данные за 15 лет.Большинство меток времени отформатированы аналогичным образом.Они находятся в столбцах «День», «Дата» и «YT»:

«Солнце», «17 декабря», «2017 11:58:00».

Данные за прошедший годотформатирован так:

"4 января - 10:43 AM"

Эта строка в одном столбце;«День».

Я ищу несколько вещей.Мне нужно, чтобы формат был таким же, чтобы я мог работать с ним.Так что надеюсь, что я могу оставить столбец дня пустым, так как он не говорит нам, какой это был день недели.Я хотел бы переместить часть строки, которая является месяцем и датой, в столбец «Дата», чтобы соответствовать предыдущим данным.и я хотел бы добавить «2018» перед отметкой времени, и это значение должно быть в столбце «YT».

Я использую DB Browser и SQLite.

Я ценю всю помощь.Я новичок в SQL и Python и прошу прощения, если я пропустил что-то очевидное.Если есть простое решение, которое я упускаю, некоторые из них будут указывать мне правильное направление, чтобы прочитать об этом / выяснить это самостоятельно, также будет очень признателен.

1 Ответ

0 голосов
/ 03 декабря 2018

Предполагая, что вы используете sqlite:

Я создал простую таблицу для проверки результатов следующим образом:

DROP TABLE IF EXISTS MY_TABLE;
CREATE TABLE MY_TABLE ("SOME_UNIQUE_ID" INTEGER,"Day" TEXT,"Date" TEXT,"YT" TEXT);
INSERT INTO MY_TABLE ("SOME_UNIQUE_ID","Day","Date","YT") VALUES ("1","Sun","Dec 17","2017 11:58:00 PM");
INSERT INTO MY_TABLE ("SOME_UNIQUE_ID","Day","Date","YT") VALUES ("2","Jan 4 - 10:43 AM","","");

Итак, после фиксации предыдущих операторов выполните следующий запрос ...

SELECT * FROM MY_TABLE;

возвращает ...

SOME_UNIQUEID Day                 Date      YT
1             Sun                 Dec 17    2017 11:58:00 PM
2             Jan 4 - 10:43 AM

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

SELECT SOME_UNIQUE_ID, 
    datetime(FULL_DATE_STRING) AS DATETIME_FULL 
    FROM (
        SELECT SOME_UNIQUE_ID,
        coalesce(YYYY_str,"") || "-" || coalesce(MM_str,"") || "-" || coalesce(DD_str,"") || " " || coalesce(HHMMSS_str,"") AS FULL_DATE_STRING
        FROM (
            SELECT SOME_UNIQUE_ID,
                substr(YT,0,5) AS YYYY_str,
                CASE substr("Date",0,4) 
                   WHEN 'Jan' 
                       THEN '01' 
                   WHEN 'Feb' 
                       THEN '02'
                   WHEN 'Mar' 
                       THEN '03'
                   WHEN 'Apr' 
                       THEN '04'
                   WHEN 'May' 
                       THEN '05'
                   WHEN 'Jun' 
                       THEN '06'
                   WHEN 'Jul' 
                       THEN '07'
                   WHEN 'Aug' 
                       THEN '08'
                   WHEN 'Sep' 
                       THEN '09'
                   WHEN 'Oct' 
                       THEN '10'
                   WHEN 'Nov' 
                       THEN '11'
                   WHEN 'Dec' 
                       THEN '12'
                   ELSE NULL
                END MM_str,
                substr("Date",5,2) AS DD_str,
                substr(substr(YT, 6),0,9) AS HHMMSS_str
            FROM MY_TABLE
            )
    )
WHERE DATETIME_FULL IS NOT NULL
UNION ALL
SELECT SOME_UNIQUE_ID, 
    datetime(YYYYMMDD_str || " " || HHMMSS_str_mod) AS DATETIME_FULL 
FROM (
    SELECT SOME_UNIQUE_ID, 
        YYYY_str || "-" || MM_str || "-" || DD_str AS YYYYMMDD_str,
        CASE AMPM_str
            WHEN 'AM'
                THEN HHMMSS_str
            WHEN 'PM'
                THEN replace(HHMMSS_str,substr(HHMMSS_str,1,2),substr(HHMMSS_str,1,2)+12)
            ELSE NULL
        END HHMMSS_str_mod
    FROM (
        SELECT SOME_UNIQUE_ID,
            "2018" AS YYYY_str,
            MM_str,
            substr('00'||D_str,-2) AS DD_str,
            HHMMSS_str,
            AMPM_str
        FROM (
            SELECT SOME_UNIQUE_ID,
            CASE substr("Day",1,3) 
               WHEN 'Jan' 
                   THEN '01' 
               WHEN 'Feb' 
                   THEN '02'
               WHEN 'Mar' 
                   THEN '03'
               WHEN 'Apr' 
                   THEN '04'
               WHEN 'May' 
                   THEN '05'
               WHEN 'Jun' 
                   THEN '06'
               WHEN 'Jul' 
                   THEN '07'
               WHEN 'Aug' 
                   THEN '08'
               WHEN 'Sep' 
                   THEN '09'
               WHEN 'Oct' 
                   THEN '10'
               WHEN 'Nov' 
                   THEN '11'
               WHEN 'Dec' 
                   THEN '12'
               ELSE NULL
            END MM_str,
            rtrim(substr("Day",5,2)) AS D_str,
            substr("Day",-8,5) || ":00" AS HHMMSS_str,
            substr("Day",-2,2) AS AMPM_str
            FROM MY_TABLE
            )
        )
    )
WHERE DATETIME_FULL IS NOT NULL
;

Возвращает:

SOME_UNIQUE_ID DATETIME_FULL
1              2017-12-17 11:58:00
2              2018-01-04 10:43:00

Отсюда вы можете получить DATETIME_FULL в любом формате, который вам нужен.например, см. https://www.sqlite.org/lang_datefunc.html. Кроме того, в python есть много способов работы с данными даты и времени, которые вы можете искать самостоятельно.

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