我的任务是获取2fromdate和todate之间的记录(作为输入参数给出)。 我无法在运算符之间使用2个输入参数...
我的查询如下......
DELIMITER $$
CREATE DEFINER=`testrunner`@`%` PROCEDURE `usp_GetAllTranasactions`(pFromDate nvarchar(30),pToDate nvarchar(30),pstatus int)
BEGIN
select
ST.UserID,U.Username,
ST.SubscriptionID,
ST.DateOfSubscription,
SM.SubType,
SM.Details,
ST.Amount,
ST.EndDate,
ST.Status
from tr_t_subscriptiontransactions ST
Join tr_m_users U on U.UserID=ST.UserID
join tr_m_subscription SM on SM.SubscriptionID=ST.SubscriptionID
where **ST.DateOfSubscription between (pFromDate and pToDate) and ST.EndDate
between(pFromDate and pToDate) and ST.Status=pstatus;**
END if;
END
这里我不知道如何在参数之间使用..plz帮助我..我想在fromdate和todate之间进行反复记录..希望你理解..
答案 0 :(得分:0)
我们假设您想要2014年6月的所有交易
在您的用户界面中,参数值为:
但是你会根据交易日期评估&时间。您如何确保6月30日 - 直到午夜 - 的每笔交易都包含在结果中?
以下是如何:使用2014-07-01而不是2014-06-30,这是查询的样子 - 不使用它们之间!
SELECT
ST.UserID
, U.Username
, ST.SubscriptionID
, ST.DateOfSubscription
, SM.SubType
, SM.Details
, ST.Amount
, ST.EndDate
, ST.Status
FROM tr_t_subscriptiontransactions ST
JOIN tr_m_users U
ON U.UserID = ST.UserID
JOIN tr_m_subscription SM
ON SM.SubscriptionID = ST.SubscriptionID
WHERE (ST.DateOfSubscription >= pFromDate AND ST.DateOfSubscription < pToDate + 1)
AND (ST.EndDate >= pFromDate AND ST.EndDate < pToDate + 1)
AND ST.Status = pstatus
;
对于日期范围,请注意between
,因为它包含下边界值和上边界值。
...等同于表达式(min&lt; = expr AND expr&lt; = max)
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between
这可能导致一种反模式&#34;看起来像这样:
但是时间单位小于1秒,因此这种方法并不完美。不要试图通过这种方式调整上限来克服between
的不足。简单而准确的方法是使用&gt; =和&lt;将上限值调整一整个时间单位(通常是第二天)。