Sql 函数获取查询的日期范围
我有下面的代码在月的第一天和昨天日期之间提取数据,除非当前日期是月的第一天,在这种情况下,它将提取上个月的第一天和昨天日期。问题是代码不是一直在工作,这个月不工作。我认为它不起作用,因为它需要5月31日的最后一天减去1个月,但没有4月31日,所以它要到5月1日?这是代码 在添加月份最后一天sysdate-1-1+1和sysdate-1之间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
只需要始终在月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