我有一个数据库表,接受这种格式的日期: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
值的行搜索日期?
答案 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