热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【SQL】HowtogetFirstandLastdayofamonth–TSQL

–FirstDayPreviousCurrentNextMonthsSELECTDATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())
– First Day Previous/Current/Next Months
SELECT      DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0),
            'First Day of Previous Month'
UNION ALL
SELECT      DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE())) - 1),
            DATEADD(MONTH, -1, GETDATE())),
            'First Day of Previous Month (2)'
UNION ALL
SELECT      DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0),
            'First Day of Current Month'
UNION ALL
SELECT      DATEADD(DAY, -(DAY(GETDATE()) - 1), GETDATE()),
            'First Day of Current Month (2)'
UNION ALL
SELECT      DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0),
            'First Day of Next Month'
UNION ALL
SELECT      DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE())) - 1),
            DATEADD(MONTH, 1, GETDATE())),
            'First Day of Next Month (2)'

Result Set:

                       

———————– ——————————-

2011-04-01 00:00:00.000 First Day of Previous Month

2011-04-01 15:47:36.660 First Day of Previous Month (2)

2011-05-01 00:00:00.000 First Day of Current Month

2011-05-01 15:47:36.660 First Day of Current Month (2)

2011-06-01 00:00:00.000 First Day of Next Month

2011-06-01 15:47:36.660 First Day of Next Month (2)

 

(6 row(s) affected)

The above queries can be generalized as below:

DECLARE @DURATION INT = 2
SELECT      DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION, 0)
            AS '+2 Months'
 
SET @DURATION = -2
SELECT      DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION, 0)
            AS '-2 Months'

Result Set:

+2 Months

———————–

2011-07-01 00:00:00.000

 

(1 row(s) affected)

 

-2 Months

———————–

2011-03-01 00:00:00.000

 

(1 row(s) affected)

And, to get last day of a month use:

– Last Day Previous/Current/Next Months
SELECT      DATEADD(DAY, -(DAY(GETDATE())), GETDATE()),
            'Last Day of Previous Month'
UNION ALL
SELECT      DATEADD(MILLISECOND, -3,
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)),
            'Last Day of Previous Month (2)'
UNION ALL
SELECT      DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE()))),
            DATEADD(MONTH, 1, GETDATE())),
            'Last Day of Current Month'
UNION ALL
SELECT      DATEADD(MILLISECOND, -3,
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)),
            'Last Day of Current Month (2)'
UNION ALL
SELECT      DATEADD(DAY, -(DAY(DATEADD(MONTH,0,GETDATE()))),
            DATEADD(MONTH, 2, GETDATE())),
            'Last Day of Next Month'
UNION ALL
SELECT      DATEADD(SECOND, -1,
            DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 2, 0)),
            'Last Day of Next Month (2)'

Result Set:

                       

———————– ——————————

2011-04-30 15:54:35.523 Last Day of Previous Month

2011-04-30 23:59:59.997 Last Day of Previous Month (2)

2011-05-31 15:54:35.523 Last Day of Current Month

2011-05-31 23:59:59.997 Last Day of Current Month (2)

2011-06-30 15:54:35.523 Last Day of Next Month

2011-06-30 23:59:59.000 Last Day of Next Month (2)

 

(6 row(s) affected)

The above queries can be generalized as below:

DECLARE @DURATION INT = 2
SELECT   DATEADD(MILLISECOND, -3,
         DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION + 1, 0))
         AS '+2 Months'
 
SET @DURATION = -2
SELECT   DATEADD(MILLISECOND, -3,
         DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @DURATION + 1, 0))
         AS '-2 Months'

Result Set:

+2 Months

———————–

2011-07-31 23:59:59.997

 

(1 row(s) affected)

 

-2 Months

———————–

2011-03-31 23:59:59.997

 

(1 row(s) affected)

Hope This Helps!

 

 

 


推荐阅读
  • 定制数据层关键字:数据层,访问,元数据,数据访问模型http://www.gaodaima.com/35448.html定制数据层_sqlserver ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 微软平台的软件开发系统中,有着一套自己的约定规则。熟悉.net开发的都会对异常处理不陌生,现阶段的各种编程语言中,都不乏异常处理机制,个中原理也都大同小异。sqlserver在批处 ... [详细]
  • 这篇文章主要讲解了“SQLServer与Access数据库ASP代码有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深 ... [详细]
  • SqlServer分区表概述(转载)
    什么是分区表一般情况下,我们建立数据库表时,表数据都存放在一个文件里。但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 抽象工厂模式 c++
    抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品https ... [详细]
  • 本文介绍如何在SQL Server中利用WITH子句和窗口函数ROW_NUMBER()来查询每个类型下的最新数据行。示例包括表结构、数据插入以及最终的查询语句。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 关于SQLSERVER的全文目录跟全文索引的区别
    很久没有写随笔了,本来之前想写一篇关于SQLSERVER全文索引的随笔,可惜没有时间,一直拖到现在才有时间写,不好意思让各位久等了~先介绍一下SQLSERVER中的存储类对象,哈哈,先介绍一下概念嘛 ... [详细]
  • 1.3.4ProfilerSQLServerProfiler是一个图形化的管理工具用于监督记录和检查SQLServer数据库的使用情况对系统管理员来说它是一个监视用户活动的间谍1. ... [详细]
  • 在目标队列中对消息进行排队时出现异常。错误:15404,状态:19。CouldnotobtaininformationaboutWindowsNTgroupuserSERVER ... [详细]
  • 本文主要介绍关于数据库,sql,sqlserver的知识点,对【数据库——概述】和【数据库到底要怎么做】有兴趣的朋友可以看下由【用编程写诗】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的数据库相 ... [详细]
author-avatar
人生如梦5mm_605
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有