首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取查询日期范围的函数

问获取查询日期范围的函数
EN

Stack Overflow用户
提问于 2014-05-10 13:52:29
回答 2查看 49关注 0票数 0

我有以下代码,以拉取数据之间的第一个月的第一天和昨天的日期,除非当前是每月的第一天,在这种情况下,它将拉前一个月的第一天和昨天的日期。问题是代码不是一直都在工作,这个月也不能工作。因为是五月的最后一天(五月三十一号)减去一个月但是没有四月三十一号所以是五月一号所以不能工作。下面是代码。

在Add_months(last_day(sysdate-1)-1)+1和sysdate-1之间

只需要代码,将始终拉之间的月1号和昨天,除非当前日期是1号,然后它将拉上个月的1号和昨天。

EN

回答 2

Stack Overflow用户

发布于 2014-05-10 14:00:49

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

代码语言:javascript
复制
BETWEEN TRUNC(SYSDATE - 1, 'MM') AND SYSDATE - 1

TRUNC(date, 'MM')将向下舍入到该月的第一天,并将时间分量设置为0。清空昨天的时间部分可能会更干净。如果没有第二个参数,TRUNC将向下舍入到当天的开始:

代码语言:javascript
复制
BETWEEN TRUNC(SYSDATE - 1, 'MM') AND TRUNC(SYSDATE - 1)
票数 0
EN

Stack Overflow用户

发布于 2014-05-10 15:27:03

代码语言:javascript
复制
;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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23577607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档