如何在mysql中使用运算符之间的2个日期输入参数?

时间:2014-07-26 06:15:50

标签: mysql sql

我的任务是获取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之间进行反复记录..希望你理解..

1 个答案:

答案 0 :(得分:0)

我们假设您想要2014年6月的所有交易

在您的用户界面中,参数值为:

  • from_date = 2014-06-01
  • to_date = 2014-06-30

但是你会根据交易日期评估&时间。您如何确保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;看起来像这样:

  • 其中dt_field介于&#39; 2014-06-01 00:00:00&#39;和&#39; 2014-06-30 23:59:59&#39;

但是时间单位小于1秒,因此这种方法并不完美。不要试图通过这种方式调整上限来克服between的不足。简单而准确的方法是使用&gt; =和&lt;将上限值调整一整个时间单位(通常是第二天)。