查询以比较带时间的日期和不带时间的日期 - python 使用访问数据库

Posted

技术标签:

【中文标题】查询以比较带时间的日期和不带时间的日期 - python 使用访问数据库【英文标题】:Query to compare between date with time and date without time - python using access db 【发布时间】:2017-01-04 15:42:28 【问题描述】:

我需要帮助来创建查询以比较带时间的日期和不带时间的日期。我正在使用带有访问数据库(pypyodbc)的python。

在数据库中,我有一个包含日期/时间(包括时间)的列,在 python 中,我有一个日期时间对象(没有时间)。

我想编写一个只比较两者日期的 sql 查询。

例如:

cur.execute("SELECT * FROM MDSSDB WHERE [ValidStartTime] = #2016-05-17#")

ValidStartTime 包含时间,因此它不起作用。我只想要 ValidStartTime 中的日期。

【问题讨论】:

【参考方案1】:

考虑使用 MS Access 的 DateValue 函数,该函数仅提取日期组件(TimeValue 是时间组件对应项)。

另外,考虑将您的日期值作为参数传递,以便更好地与您的 Python 环境集成,而无需连接到 Access 的 # 表单中。下面将参数作为一个项目的元组传递:

from datetime import datetime

...
cur.execute("SELECT * FROM MDSSDB WHERE DateValue([ValidStartTime]) = ?", (datetime(2016, 5, 17),))

【讨论】:

可能值得一提的是WHERE DateValue([ValidStartTime]) 不是sargable,因此查询将始终进行表扫描,即使ValidStartTime 上有索引。

以上是关于查询以比较带时间的日期和不带时间的日期 - python 使用访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

在带有/不带时区的日期或时间戳的查询中处理 generate_series()

oracle能单独存一个不带时间的日期么?或者是不带日期的时间

获取不带日期的当前时间

在mysql中执行带和不带索引的查询

使用不带特殊字符 + 验证格式的日期输入创建一个 from

SQL 按日期分组,但也获取不带记录的日期