繁体   English   中英

如何使用日期范围过滤MySQL查询

[英]How to filter a mysql query with date range

我有一个数据库表可以接受以下格式的日期: 5/15/2017现在,当我查询表时:

SELECT *
FROM table
WHERE 1 = 1

有一个表单字段,其中包含用于过滤查询的日期。 字段值将始终采用以下格式:例如,今天= 5/15/2017 - 5/15/2017 /2017-5/ 5/15/2017 - 5/15/2017 ,上个月= 4/1/2017 - 4/31/2017 form.date由两个日期组成,以-月份,日期和年份分隔。

现在,我想向查询添加条件。 如果定义了表单,请按日期对其进行过滤。 因此它将是这样的:

<cfquery datasource="xx" name="ys">
    SELECT *
    FROM table
    WHERE 1 = 1
    <cfif isdefined ("form.date") and form.date neq "">
    AND date = '#form.date#'
    </cfif>
</cfquery>

我知道cfif的语句是错误的,但是如何使日期搜索跨form.date值的数据库中的行?

提交查询之前,请执行您的逻辑。 像这样:

queryStartDateString = trim(listFirst(form.date, '-')); 
queryEndDateString = trim(listLast(form.date, '-'));
queryStartDate = parseDateTime(queryStartDateString, 'm/d/yyyy');
queryEndDate = parseDateTime(queryEndDateString, 'm/d/yyyy');
queryEndDate = dateAdd('d', 1, queryEndDate);

然后在您的查询中:

where to_date_column >= <cfqueryparam value = "#queryStartDate#" cfsqltype="cf_sql_date">
and from_date_column < <cfqueryparam value = "#queryEndDate#" cfsqltype="cf_sql_date">

由于代码不完整,因此这里是一个示例SQL语句,如果您将日期和日期分开,则可以使用该语句,因此建议您在代码和数据库中(但最重要的是在数据库中)将它们分开。

select * from table 
where from_date_column>='from_date' 
and to_date_column<='to_date' 
order by from_date

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM