python - 如果我没有将任何日期传递给 between 子句,如何从表中获取所有记录?
问题描述
我在“2020-07-21”和“2021-07-21”之间有一个查询 SELECT * FROM table sid WHERE cast(sid.created_at as date)。这工作正常,并提供上述日期之间的记录。但是我想要所有的记录,如果我没有通过日期。谁能帮我这个?
解决方案
您可以对这两种情况使用一个查询:
query = """
SELECT *
FROM sid
WHERE created_at BETWEEN COALESCE(NULLIF(?, ''), created_at) AND COALESCE(NULLIF(?, ''), created_at)
"""
如果数据类型created_at
是DATE
,则无需DATE
再次转换。
如果是DATETIME
或TIMESTAMP
则:
query = """
SELECT *
FROM sid
WHERE DATE(created_at) BETWEEN COALESCE(NULLIF(?, ''), DATE(created_at)) AND COALESCE(NULLIF(?, ''), DATE(created_at))
"""
然后将参数作为元组传递:
cursor.execute(query, ('2020-07-21', '2021-07-25'))
或传递空字符串:
cursor.execute(query, ('', ''))
推荐阅读
- sql-server - SQL Server - 从备份更新所有表中的所有数据
- c# - 一个类的属性作为参数传递给另一个类的构造函数。如何用 Autofac 解决这个问题?
- java - ApiController 等的命名从哪里获取 swagger codegen maven 插件?
- android - 谷歌分析安卓应用未显示 Firebase 属性
- android - 如何修复 Android App 中的此类布局问题
- php - 我可以使用其他编码语言生成 html 代码吗?
- odata - 在 OData 中获取多个主键记录
- angular - Angular 中的代码执行需要更多时间
- css - 如何水平对齐两个 div 并强制内容位于 div 内
- google-bigquery - Bigquery LegacySQL 使用特殊装饰器及时的无效快照@0