【问题标题】:SQLite3 Import data as datetime formatSQLite3 以日期时间格式导入数据
【发布时间】:2020-03-23 13:47:05
【问题描述】:

目标

将我的日期列数据作为日期时间导入到我的 sqlite3 表中

问题

从我在网上阅读的内容看来,在导入sqlite3 时需要将“日期”数据转换为datetime,因为数据类型的唯一选项是textintegerblobreal。我进行了审查并尝试使用 strftime 命令 - 我理解它应该能够转换它 - 但从我在网上看到的人们在 sql 查询中引用它而不是导入。有人可以确认我正在做的事情是正确的还是我做错了什么我应该如何CAST 日期输入?抱歉,如果这是一个基本问题,这是我第一次尝试使用数据构建自己的 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

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    这看起来不错,但根据您想要对数据执行的操作,您还可以将日期保留为时间戳。如果您主要使用Date 列来显示日期而不重新格式化然后执行您的操作,它可以工作。但是,如果主要在日期计算中使用Date 列,或者在显示之前将其格式化为不同的语言环境,您也可以将其保留为数字,您始终可以在查询中使用strftime 将数字表示格式化为任何语言环境您在查询时想要的表示。

    【讨论】:

    • 我的目标是使用列查询日期范围,并希望可以正确导入,这样我就不必记住strftime。这是可能的还是我必须专注于在查询本身中这样做?在哪种情况下,您建议将其保留为整数而不是字符串 - 基于我将如何使用该列?
    • 如果您的主要用例是选择日期范围,我认为使用字符串版本您的查询会更简单。我的一般建议是查看您将要进行的查询并为此优化数据导入和模式——如果您的导入很复杂,如果它使您的查询变得简单,请不要担心。我忘记了 SQLite 的日期函数有多么有限,而且对于几乎所有情况,你最好将日期作为字符串。
    【解决方案2】:

    原来我不知道如何阅读文档,sqlite3 有一个 Date 数据类型

    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
    

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多