【问题标题】:How to use between operator for 2 date input parameters in mysql?如何在运算符之间使用mysql中的2个日期输入参数?
【发布时间】:2014-07-26 06:15:49
【问题描述】:

我的任务是获取 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

这里我不知道如何在参数之间使用..请帮助我..我想检索 fromdate 和 todate 之间的记录..希望你理解..

【问题讨论】:

  • 请勿将between 用于日期范围,这不是最佳做法。

标签: mysql sql


【解决方案1】:

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

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

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

但您将根据交易日期和时间进行评估。您如何确保 6 月 30 日(直到午夜)的每一笔交易都绝对包含在结果中?

方法如下:使用 2014-07-01 而不是 2014-06-30,这是查询的样子 - 不使用 between!

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

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

这可能导致一个“反模式”,如下所示:

  • 其中 dt_field 在 '2014-06-01 00:00:00' 和 '2014-06-30 23:59:59' 之间

但是有小于一秒的时间单位,所以这种方法是不完善的。不要试图通过这种方式调整上限值来克服between 的不足。更简单更准确的方法是使用 >= 和

【讨论】:

  • 叹息,显然我写的没有任何区别。为了使日期范围准确,应该将上限向上推一天,并且您不要使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
  • 2014-09-19
  • 1970-01-01
相关资源
最近更新 更多