首页 > 解决方案 > 如果我没有将任何日期传递给 between 子句,如何从表中获取所有记录?

问题描述

我在“2020-07-21”和“2021-07-21”之间有一个查询 SELECT * FROM table sid WHERE cast(sid.created_at as date)。这工作正常,并提供上述日期之间的记录。但是我想要所有的记录,如果我没有通过日期。谁能帮我这个?

标签: pythonmysql

解决方案


您可以对这两种情况使用一个查询:

query = """
SELECT * 
FROM sid 
WHERE created_at BETWEEN COALESCE(NULLIF(?, ''), created_at) AND COALESCE(NULLIF(?, ''), created_at)
"""

如果数据类型created_atDATE,则无需DATE再次转换。

如果是DATETIMETIMESTAMP则:

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, ('', '')) 

推荐阅读