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

使用滚动窗口从sybasesql数据库中提取数据

  •  0
  • TheGoat  · 技术社区  · 6 年前

    我希望从数据库中提取三年的数据,但现在我必须使用between语句在代码的多个部分中指定日期:

    BETWEEN '2015-10-01' AND '2018-09-30'
    

    因为数据库只包含上个月的有效数据,所以我想把上个月底的数据倒回去三年。

    我发现 this

    ----Last Day of Previous Month
    SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
    LastDay_PreviousMonth
    

    我的代码如下所示,但我看到的错误是关于将0转换为日期。

    DECLARE @date DATE
    SET @date = getdate()
    
    SELECT dateadd(second,-1,dateadd(mm, DATEDIFF(m,0,GETDATE()),0))
    

    如果有人有任何建议,我将非常感谢您的指导。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Wolfgang Kais    6 年前

    DATEDIFF(month, [YourDateColumn], GETDATE()) BETWEEN 1 AND 36
    
        2
  •  0
  •   Yogesh Sharma    6 年前

    您当前的代码看起来不错,没有任何错误,但是您可以使用 EOMONTH() 相反。

    但是,不同之处在于返回类型,代码返回日期和时间 eomonth()

    DECLARE @date DATE
    SET @date = getdate()
    
    SELECT EOMONTH(@date, -1)
    
        3
  •  0
  •   Adrian Maxwell    6 年前

    不要使用 between 当月第一天

    Select *
    From yourtables
    where datecol >= dateadd (year,-3,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0) )
    And datecol < DATEADD(mm,DATEDIFF(m,0,GETDATE()),0) 
    

    请不要使用任何以23:59:59作为一天结束时间的溶液。这不是一天的结束,现在有几种数据类型支持亚秒级的时间精度。


    如果您真的不能在date函数中使用零,只需使用基日期“1900-01-01”

    SELECT
      DATEADD(YEAR, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), '1900-01-01'))
    , DATEADD(mm, DATEDIFF(m, 0, GETDATE()), '1900-01-01')
    ;
    

    in this demo here ):

    SELECT
      DATEADD(YEAR, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0))
    , DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0)
    ;