sql - PostgreSQL -> SQLite : DATE_TRUNC Equivalent

标签 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 中的日期/时间函数,似乎它们仅用于字符串格式。希望我看到了一些错误。

最佳答案

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)

关于sql - PostgreSQL -> SQLite : DATE_TRUNC Equivalent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638907/

相关文章:

php - 从日期到日期 - 搜索和显示

java - Hibernate比sql查询慢1000倍

SQL:为具有多个结果的记录创建新列?

sql - SQL Server 2005 及以上版本中使用动态列的交叉表查询

android - SQLiteStatement - 列不是唯一的 - Android?

sqlite - 在 Windows Phone 8 中使用 SQLite 时无法使用商店测试工具包

sql - 对 SQLite 上标记的行进行计数

java - 安卓谷歌驱动器 SDK : Saving to App Folder

sqlite - 如何在Flutter sqflite上的sql语句中插入var?

android - SQLite DELETE 查询不工作