【问题标题】:Converting from one date format to another using DB Browser for SQLite使用 DB Browser for SQLite 从一种日期格式转换为另一种日期格式
【发布时间】:2017-11-20 14:13:21
【问题描述】:

我希望使用 SQL 将一种日期格式转换为另一种日期格式。我正在使用 DB Browser for SQLite,日期存储在“TEXT”类型的列中。

以下是当前格式的 2 个示例:

2017 年 4 月 17 日上午 9:09:09

2017 年 10 月 4 日晚上 10:21:13

请注意,在当前的日期、月份和小时格式中,如果只有一个数字,它们目前不会用前导“0”填充。他们也将月份放在首位,然后是日期,然后是年份。 这 2 个示例应转换为 YYYY-MM-DD HH:MM:SS(24 小时)格式:

2017 年 4 月 17 日上午 9:09:09 -> 2017-04-17 09:09:09

2017 年 10 月 4 日晚上 10:21:13 -> 2017-10-04 22:21:13

等等

如果有人能给我提供一个 SQL 查询,它可以将列中的所有值(如第一种格式)转换为第二种格式,将不胜感激。谢谢!

【问题讨论】:

  • 你可能会用一些淫秽的instr()substr() 命令链来完成它,但使用python或其他东西几乎肯定会更快,更不痛苦。
  • Reformat dates in column,但时间字段有32种可能的组合。

标签: sql sqlite


【解决方案1】:

所以我对 python 了解不多,所以不得不使用“instr() 和 substr() 命令的淫秽链”。这是一团糟,但现在似乎可以工作了。

instr(DATE,'/')用于查找第一个'/'的位置

length (rtrim(DATE, 'PMA0123456789: '))用来查找第二个'/'的位置

instr(DATE, ':')用来查找第一个':'的位置

下面是我造成的混乱:D

UPDATE testtable
SET DATE = 
substr (DATE, length (rtrim(DATE, 'PMA0123456789: '))+1,4) || '-' ||
CASE instr(DATE, '/')
    WHEN 2 THEN
        '0' 
    ELSE ''
END 
|| substr (DATE,1,instr(DATE,'/')-1) || '-' ||
CASE (length (rtrim(DATE, 'PMA0123456789: '))) - instr(DATE,'/')
    WHEN 2 THEN
        '0' 
    ELSE '' 
END 
|| substr (DATE,instr(DATE,'/')+1, length (rtrim(DATE, 'PMA0123456789: ')) - instr(DATE,'/')-1)
|| ' ' || 
CASE substr(DATE,length(DATE)-1,2)
    WHEN 'AM' THEN
        CASE substr(DATE, instr(DATE, ':')-2,2)
            WHEN '12' then
                '00'
            ELSE
                CASE substr(DATE, instr(DATE, ':')-2, 1)
                    WHEN ' ' THEN 
                        '0'
                    ELSE
                        substr(DATE, instr(DATE, ':')-2,1)  
                END
                || substr(DATE, instr(DATE, ':')-1,1) 
        END
    WHEN 'PM' THEN
        CASE substr(DATE, instr(DATE, ':')-2,2) 
            WHEN '12' THEN
                substr(DATE, instr(DATE, ':')-2,2) 
            ELSE
                CAST (substr(DATE,instr(DATE, ':')-2,2) AS INT) + 12 
        END
    ELSE
        'error'
END 
|| ':' || substr(DATE,instr(DATE, ':')+1,5);

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多