SQLite解析带有日期信息的TEXT列

时间:2018-03-19 11:49:59

标签: sql sqlite

我正在使用SQLite DB而且我的“日期”列是VARCHAR

我需要在两个日期之间提取数据......

这是我试过的......

SELECT * FROM Table1 WHERE Date BETWEEN '14/03/2017 17:00:10' AND '16/03/2018 17:00:12'
SELECT * FROM Table1 WHERE strftime('%d/%m/%y %H:%M:%S', Date) BETWEEN  strftime('%d/%m/%y %H:%M:%S','15/07/2016 20:00:09') AND  strftime('%d/%m/%y %H:%M:%S','16/07/2017 21:00:09')
SELECT * FROM Table1 WHERE strftime('%d/%m/%y %H:%M:%S', Date) BETWEEN  '2017/07/15 20:00:09' AND  '2017/07/17 21:00:09'

知道我做错了吗?

2 个答案:

答案 0 :(得分:2)

如果您有日期/时间列,那么只需执行:

SELECT t1.*
FROM Table1 t1
WHERE t1.Date >= '2017-03-14 17:00:10' AND
      t1.Date < '2018-03-16 17:00:12';

对常量使用ISO / ANSI标准日期格式!

我强烈建议您不要将between与日期/时间值一起使用。 Here是关于该主题的博客文章,尽管SQL Server适用于所有数据库。

答案 1 :(得分:1)

您无法使用SQLite的strftime,因为它的格式化功能,它无法解析输入字符串。

基本上你有两个选择:

  1. 尝试使用内置函数解析字符串
  2. 创建用户定义的功能
  3. 如果您可以依赖固定位置,则可以轻松解析字符串并将其格式化以符合支持的SQLite DateTime formats之一。在您的情况下,它可能如下所示:

    SELECT [Date] FROM Table1 WHERE 
    DATETIME(printf('%04d-%02d-%02d %02d:%02d:%02d', 
        substr([Date], 7, 4), substr([Date], 4, 2), substr([Date], 1, 2), 
        substr([Date], 12, 2), substr([Date], 15, 2), substr([Date], 18, 2))) 
    BETWEEN '2017-07-15 20:00:05' AND '2017-07-17 21:00:09'
    

    请注意,您还必须更改BETWEEN的语法,以匹配其中一种支持的DATETIME格式。