我有一个接受这种格式的日期的数据库表:5/15/2017
现在,当我查询表时:
SELECT *
FROM table
WHERE 1 = 1
有一个表单字段,其中包含用于过滤查询的日期。字段值将始终采用这种格式:例如 Today = 5/15/2017 - 5/15/2017
,
lastmonth = 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">
关于mysql - 如何使用日期范围过滤 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43980958/