PostgreSQL - > SQLite:DATE_TRUNC等效

时间:2015-02-20 21:55:30

标签: sql sqlite

星期五下午,我被炒了。所以SQL爱好者如何在PostgreSQL中使用以下WHERE子句并将其转换为SQLite3而不使用编译扩展:

WHERE
  DATE_TRUNC('day', c.start_date) <= DATE_TRUNC('day', q.date) AND
  DATE_TRUNC('day', c.end_date) >= DATE_TRUNC('day', q.date)

在SQLite3中查看日期/时间函数似乎它们只用于字符串格式化。希望我看错了。

2 个答案:

答案 0 :(得分:3)

SQLite没有日期的数据类型;它改为使用strings or numbers

要删除时间戳的时间部分,请使用start of day modifier。 要使用的实际功能(datetime()julianday()strftime('%s'))取决于日期值的格式:

WHERE
  datetime(c.start_date, 'start of day') <= datetime(q.date, 'start of date') AND
  datetime(c.end_date,   'start of day') >= datetime(q.date, 'start of date')

在这种情况下,您可以使用date()函数,因为您不关心结果的实际格式,只关注它的比较方式:

WHERE
  date(c.start_date) <= date(q.date) AND
  date(c.end_date)   >= date(q.date)

答案 1 :(得分:0)

我无法使上述方法工作数小时或数分钟。

对于这些,您可以使用strftime功能来解决问题:

select datetime(strftime('%Y-%m-%dT%H:00:00', 'now'));