PostgreSQL-> SQLite:等效于DATE_TRUNC

whe*_*ies 4 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)
Run Code Online (Sandbox Code Playgroud)

查看SQLite3中的日期/时间函数,似乎它们仅用于字符串格式。希望我看到了问题。

CL.*_*CL. 5

SQLite没有日期数据类型。它使用字符串或数字代替。

要删除时间戳记的时间部分,请使用start of day修饰符。实际功能使用(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')
Run Code Online (Sandbox Code Playgroud)

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

WHERE
  date(c.start_date) <= date(q.date) AND
  date(c.end_date)   >= date(q.date)
Run Code Online (Sandbox Code Playgroud)