2012-02-15 46 views
1

我的购物车中有一个凭证系统,凭证的有效日期和有效日期。 确保它们有效的最佳方法是什么?使用ColdFusion或SQL钻取日期范围

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

以下是下面的代码,我使用自定义标记正确地转换日期,因为这对欧洲日期有很大帮助! FYI:日期字段在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

你有正确的想法,请让你的运营商逆转。

  • 的开始日期具有在有效日期之前,和
  • 的结束日期必须是活动日期

您的WHERE子句中只要改变这个后:

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

(当然,你的#myDate#变量应该在cfqueryparam tags。)

+0

谢谢你们!显然不清楚!我现在要添加' 2012-02-15 13:59:57

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

AND #myDate# BETWEEN dte_vouch_start AND dte_vouch_expiry