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

时间:2017-11-20 14:13:22

标签: sql sqlite

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

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

2017/4/17 9:09:09

10/4/2017 10:21:13 PM

请注意,在当前日,月和小时的格式中,他们目前不会使用前导' 0'如果只有一个数字。他们也把月份放在第一天,然后放在第一天,然后是一年。 这两个例子应转换为YYYY-MM-DD HH:MM:SS(24小时)格式:

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

10/4/2017 10:21:13 PM - > 2017-10-04 22:21:13

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

1 个答案:

答案 0 :(得分:1)

所以我不太了解python,所以不得不使用instr()和substr()命令的淫秽链。这很麻烦,但现在似乎有效。

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

的位置

length (rtrim(DATE, 'PMA0123456789: '))用于查找第二个' /'

的位置

instr(DATE, ':')用于查找第一个&#39; <#39;

的位置

下面是我创造的混乱: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);