我有一个数据库表,它接受以下格式的日期:5/15/2017
现在,当我使用以下命令查询表时:
SELECT *
FROM table
WHERE 1 = 1
有一个表单字段,其中包含用于过滤查询的日期。字段值将始终采用以下格式:例如 今天 = 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