SQLite3 Импорт данных в формате даты и времени - PullRequest
0 голосов
/ 23 марта 2020

Цель

Импортировать данные моего столбца даты в мою таблицу sqlite3 как datetime

Выпуск

Из того, что я прочитал в Интернете, кажется, нужно преобразовать "дату" данные в datetime при импорте в sqlite3, поскольку единственными опциями типов данных являются text, integer, blob и real. У меня был обзор, и я попытался обработать команду strftime, которая, как я понимаю, должна быть в состоянии преобразовать это, но из того, что я видел в Интернете, люди обращаются к ней в запросе sql, а не к импорту. Может кто-нибудь подтвердить, правильно ли я делаю или что я делаю неправильно с тем, как мне CAST ввести дату? Извините, если это базовый c вопрос, я впервые пытаюсь построить свои собственные sql таблицы с данными.

Примечания

Я знаю, что строка CAST для мой столбец даты выбрасывает ошибки, поскольку он ожидает команду AS.

сценарий

sqlite3 -batch ~/.databases/mydatabase.db <<EOF
CREATE TABLE IF NOT EXISTS mydata(
Client  TEXT NOT NULL,
Date    TEXT NOT NULL,
Platform        TEXT,

CREATE TEMPORARY TABLE data(
Client  TEXT NOT NULL,
Date    INTEGER NOT NULL,
Platform        TEXT,

.mode tabs
.separator \t
.import tabledata.tsv data

INSERT INTO mydata_data (Client, Date, Platform)

SELECT                                                                                                                   
    CAST (Client AS TEXT),                                                                                               
    CAST (strftime('%Y-%m-%d',Date)),
    CAST (Platform AS TEXT)
FROM data;
EOF

формат даты

2020-03-19
2020-03-07
2020-03-20
2020-03-08
2020-03-04
2020-03-21
2020-03-22
2020-02-22
2020-02-24

Ответы [ 2 ]

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

Оказывается, я не знаю, как читать документацию, и существует тип данных Date для sqlite3

sqlite3 -batch ~/.databases/mydatabase.db <<EOF
    CREATE TABLE IF NOT EXISTS mydata(
    Client  TEXT NOT NULL,
    Date    DATE NOT NULL,
    Platform        TEXT,

    CREATE TEMPORARY TABLE data(
    Client  TEXT NOT NULL,
    Date    INTEGER NOT NULL,
    Platform        TEXT,

    .mode tabs
    .separator \t
    .import tabledata.tsv data

    INSERT INTO mydata_data (Client, Date, Platform)

    SELECT                                                                                                                   
        CAST (Client AS TEXT),                                                                                               
        strftime('%Y-%m-%d',Date),
        CAST (Platform AS TEXT)
    FROM data;
    EOF
0 голосов
/ 23 марта 2020

Это выглядит нормально, но в зависимости от того, что вы хотите сделать с данными, вы также можете сохранить даты в качестве временных отметок. Если вы в основном используете столбец Date для отображения даты без переформатирования, тогда делайте то, что вы делаете, это работает. Однако, если в вычислениях даты в основном использовать столбец Date или форматировать его в разных локалях перед его отображением, вы также можете сохранить его как число, вы всегда можете использовать strftime в запросах для форматирования числового представления в любой локали представление, которое вы хотите во время запроса.

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