我試圖在SQL中使用BETWEEN
運算符在特定日期之間獲取訂單。在日期SQL和Coldfusion中使用BETWEEN
我的日期格式爲dd/mm/yyyy格式。
ord_fdate是起始日期:01/03/2012目前
ord_tdate是迄今:目前07/03/2012
我認爲這會從01/03/2012返回所有訂單(包括01/03/2012)至2012年3月7日(包括07/03/2012)。
但是,它不會與日期的訂單07/03/2012
我下面的查詢;我還包括查詢的調試輸出;
<cfset ord_fdate = DateFormat(ord_fdate, "dd/mm/yyyy")>
<cfset ord_tdate = DateFormat(ord_tdate, "dd/mm/yyyy")>
<cfquery name="getOrders" datasource="#application.dsn#">
SELECT
dbo.tbl_orders.uid_orders,
dbo.tbl_orders.dte_order_stamp
FROM
dbo.tbl_orders
WHERE dbo.tbl_orders.uid_order_webid=<cfqueryparam cfsqltype="cf_sql_integer" value="#session.webid#">
AND bit_order_archive=<cfqueryparam cfsqltype="cf_sql_bit" value="no">
AND txt_order_status=<cfqueryparam cfsqltype="cf_sql_varchar" value="Awaiting Dispatch">
AND dte_order_stamp BETWEEN <cfqueryparam cfsqltype="cf_sql_date" value="#createODBCDate(ord_fdate)#"> AND <cfqueryparam cfsqltype="cf_sql_date" value="#createODBCDate(ord_tdate)#">
ORDER BY dte_order_stamp DESC
</cfquery>
調試;
WHERE (dbo.tbl_orders.uid_order_webid=?
AND bit_order_archive=?
AND txt_order_status=?
AND dte_order_stamp BETWEEN ? AND ?)
ORDER BY dte_order_stamp DESC
Query Parameter Value(s) -
Parameter #1(cf_sql_integer) = 1
Parameter #2(cf_sql_bit) = NO
Parameter #3(cf_sql_varchar) = Awaiting Dispatch
Parameter #4(cf_sql_date) = {ts '2012-03-01 00:00:00'}
Parameter #5(cf_sql_date) = {ts '2012-03-07 00:00:00'}
不知道爲什麼它不起作用。
數據庫是SQL 2008
任何想法?
日期是否有時間分量?如果結束日期有時間分量,比如07/03/2012 03:00:12,那麼它將不匹配。另外,你的代碼中有一個錯字:「」 –
2012-03-07 12:46:45
@Jason - 你確定DateFormat(..,「dd/mm/yyyy」)>真的在做你認爲的事情嗎? DateFormat(和createODBCDate)始終假定* input *是美國日期格式。 – Leigh 2012-03-07 16:19:05