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

时间:2017-05-15 13:33:28

标签: mysql date coldfusion

我有一个数据库表,接受这种格式的日期:5/15/2017 现在,当我用:

查询表时
SELECT *
FROM table
WHERE 1 = 1

有一个表单字段,其中包含筛选查询的日期。字段值将始终采用以下格式:例如Today = 5/15/2017 - 5/15/2017,  lastmonth = 4/1/2017 - 4/31/2017form.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值的行搜索日期?

2 个答案:

答案 0 :(得分:3)

在提交查询之前执行逻辑。像这样:

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">

答案 1 :(得分:0)

由于代码不完整,这里是一个示例SQL语句,如果你将from和to日期分开,它会起作用,我建议你在代码和数据库中将它们分开,但最重要的是在数据库中。< / p>

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