我试图在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