使用ColdFusion或SQL钻取日期范围

时间:2012-02-15 13:40:59

标签: sql coldfusion

我的购物车里有代金券系统,代金券有效日期和有效日期。 确保有效的最佳方式是什么?

我愚蠢地设置今天的日期,然后询问数据库今天的日期是否大于或等于开始日期。即是02/02/2012 GTE 15/02/2012这显然不是!然后我问数据库,到期日期是LTE到今天的日期。即是2012年2月29日LTE 15/02/2012再次它不是!当我把它放下纸时听起来是正确的!

以下是下面的代码,我正在使用自定义标记来正确转换日期,因为这对欧洲日期有很大帮助!仅供参考:日期字段在sql数据库中设置为日期。

我需要做的是确保今天的日期介于开始日期和结束日期之间。是否最好使用ColdFusion创建日期范围或在ColdFusion中使用BETWEEN运算符?

<cfset todaysDate = DateFormat(now(), "dd/mm/yyyy")>
<CF_convertDate inputVariable="todaysDate" inputMask="EU" outputType="odbcdate" outputVariable="myDate">

<cfquery name="chk_voucher" datasource="#application.dsn#">
SELECT 
  uid_vouchers,
  txt_vouch_name,
  txt_vouch_descrip,
  txt_vouch_code,
  txt_vouch_type,
  txt_vouch_percent,
  txt_vouch_value,
  dte_vouch_expiry,
  dte_vouch_start,
  uid_vouch_webid,
  bit_vouch_archived,
  txt_vouch_asign
FROM dbo.tbl_vouchers
WHERE bit_vouch_archive=<cfqueryparam cfsqltype="cf_sql_bit" value="no">
AND dte_vouch_start >= #myDate# AND dte_vouch_expiry <= #myDate#
AND txt_vouch_code=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.txt_vouch_code#">
</cfquery>

任何帮助都将不胜感激!!

2 个答案:

答案 0 :(得分:2)

你有正确的想法,你只需要颠倒你的操作员。

  • 开始日期必须是之前活动日期,AND
  • 结束日期必须在活动日期之后

只需在WHERE子句中更改此内容:

AND dte_vouch_start <= #myDate# AND dte_vouch_expiry >= #myDate#

(当然,您的#myDate#变量应该在cfqueryparam标记中。)

答案 1 :(得分:1)

AND dte_vouch_start <= #myDate# AND dte_vouch_expiry >= #myDate#

AND #myDate# BETWEEN dte_vouch_start AND dte_vouch_expiry