Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 函数获取查询的日期范围_Sql_Function_Date - Fatal编程技术网

Sql 函数获取查询的日期范围

Sql 函数获取查询的日期范围,sql,function,date,Sql,Function,Date,我有下面的代码在月的第一天和昨天日期之间提取数据,除非当前日期是月的第一天,在这种情况下,它将提取上个月的第一天和昨天日期。问题是代码不是一直在工作,这个月不工作。我认为它不起作用,因为它需要5月31日的最后一天减去1个月,但没有4月31日,所以它要到5月1日?这是代码 在添加月份最后一天sysdate-1-1+1和sysdate-1之间 只需要始终在月1日和昨天之间拉取的代码,除非当前日期为1日,否则它将拉取上月1日和昨天的日期。您的表达式甚至可以简化: BETWEEN TRUNC(SYSDA

我有下面的代码在月的第一天和昨天日期之间提取数据,除非当前日期是月的第一天,在这种情况下,它将提取上个月的第一天和昨天日期。问题是代码不是一直在工作,这个月不工作。我认为它不起作用,因为它需要5月31日的最后一天减去1个月,但没有4月31日,所以它要到5月1日?这是代码

在添加月份最后一天sysdate-1-1+1和sysdate-1之间


只需要始终在月1日和昨天之间拉取的代码,除非当前日期为1日,否则它将拉取上月1日和昨天的日期。

您的表达式甚至可以简化:

BETWEEN TRUNC(SYSDATE - 1, 'MM') AND SYSDATE - 1
TRUNCdate,'MM'将向下舍入到月份的第一个,并将时间分量设置为0。清除昨天的时间成分可能更干净。如果没有第二个参数,TRUNC将四舍五入到一天的开始:

BETWEEN TRUNC(SYSDATE - 1, 'MM') AND TRUNC(SYSDATE - 1)
;WITH rangeCTE AS
(
    SELECT  Convert(DateTime, '2013-09-01') minDate,
            Convert(DateTime, '2014-06-30') maxDate
)

,datelistCTE AS
(
        SELECT  CAST(CONVERT(CHAR(6),minDate,112) + '01' AS DATETIME) AS monthStart,
                DATEADD(mm, 1, CAST(CONVERT(CHAR(6), minDate, 112) + '01' AS DATETIME)) -1 AS monthEnd
               ,1 AS monthID
        FROM rangeCTE

        UNION ALL

        SELECT  DATEADD(mm, 1, monthStart)
               ,DATEADD(mm, 2, monthStart) - 1
               ,monthID + 1
        FROM datelistCTE
        WHERE monthStart <= (SELECT maxDate FROM rangeCTE)
)
select * from datelistCTE