代码之家  ›  专栏  ›  技术社区  ›  beginner

sql server中的Between子句

  •  -1
  • beginner  · 技术社区  · 7 年前

    假设我今天(6月30日)提交了数据

    AS
    BEGIN
        @Year navchar(200) = null
        @Rtype navchar(200) = = null
    
        SELECT  *
        FROM ProjectDetails 
        where SubmittedDate Between @Year and @Rtype
    
    END
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Caius Jard    7 年前

    首先,sql server内部的日期表示为自某个日期(1900年1月1日午夜)起的天数

    让我们来看一个例子

    假设您想要1900年1月1日到1900年1月份10日之间的记录,那么实际上,您想要的是1900年1月10日时间达到23:59:59(和999999…毫秒)的记录

    这意味着您需要1月1日午夜后0.0到9.99999天之间的记录。。。。

    但当您运行查询时,您只是要求:

    在SQL术语中,这是

    介于0.0和9.0之间

    而不是你想要的:

    我相信你会理解9.25不是在0.0和9.0之间

    然而,您将得到恰好发生在10日午夜的记录,因为它们在内部表示为9.0,9.0在0.0和9.0之间

    date >= startdate AND date < enddate_plus_one_day

    i、 e.在内部日期表示tersm中,如果你想得到早上6点的日期,即1900年1月1日后的9.25天,那么你需要进行查询 date >= 0.0 and date < 10.0 -这将返回所有记录,包括23:59:59


    SELECT  *
    FROM ProjectDetails 
    where SubmittedDate >= CONVERT(datetime, @Year, 112)--pass date as string in yyyymmdd
      AND SubmittedDate < (CONVERT(datetime, @Rtype, 112)+1.0) --pass date as a string in yyyymmdd
    
        2
  •  -1
  •   Alfaiz Ahmed    7 年前
     - --Convert The Date And check The Result Output 
              DECLARE 
                  @Year NVARCHAR(200) = null,
                   @Rtype NVARCHAR(200)  = null
    
                   SELECT  *
                   FROM ProjectDetails 
                   WHERE CONVERT(NVARCHAR, SubmittedDate,111)   >= CONVERT(NVARCHAR,@Year,111) AND CONVERT(NVARCHAR,
       SubmittedDate,111)<= CONVERT(NVARCHAR,@Rtype,111)