小编典典

使用DB Browser for SQLite从一种日期格式转换为另一种日期格式

sql

我正在寻找使用SQL将一种日期格式转换为另一种格式。我正在使用用于SQLite的数据库浏览器,日期存储在“ TEXT”类型的列中。

这是当前格式的2个示例:

2017/4/17上午9:09:09

2017/10/4下午10:21:13

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

IE

4/17/2017 9:09:09 AM-> 2017-04-17 09:09:09

2017/10/4下午10:21:13-> 2017-10-04 22:21:13

等等。

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


阅读 236

收藏
2021-04-14

共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);
2021-04-14