-- 当月第一天
select dateadd(month, datediff(month, 0, getdate()), 0)

-- 当月最后一天(思路:下月的第一天减去一天)
select dateadd(month, datediff(month, 0, dateadd(month, 1, getdate())), -1)

-- 当年第一天
select dateadd(year, datediff(year, 0, getdate()), 0)

-- 当年最后一天(思路:下年的第一天减去一天)
select dateadd(year, datediff(year, 0, dateadd(year, 1, getdate())), -1)

--------------------------------------------------------------------------------------------------

函数datediff(month, 0, getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。

记住:日期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。

下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。另外,计算出来的日期的时间部分将会是“00:00:00.000”。

这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。

最新文章

  1. Linux0.11内核--进程调度分析之2.调度
  2. VUE2.0不可忽视的很多变化
  3. Android三种播放视频的方式
  4. 使用BLADE构建c++工程管理
  5. Floyd 求最短路(poj 1161)
  6. U盘安装Linux安装报错及解决方案
  7. Spring MVC 之文件上传(七)
  8. ntp.conf:很少有人提及的事
  9. Elsevier期刊网上投稿指南
  10. XianBicycle
  11. Oracle EBS-SQL (WIP-5):检查非标任务本身选上了MRP净值.sql
  12. JMM简介
  13. jQuery概念
  14. 【win7】安装开发环境
  15. 用JavaScript写一个简单的计算器
  16. Java笔试面试题整理第三波
  17. __getitem__ __setitem__ __delitem__ 使用
  18. Iptables防火墙规则使用
  19. Tushare test
  20. 第9月第6天 push pop动画 生成器模式(BUILDER)

热门文章

  1. NOI2013部分题解
  2. [CEOI2017]One-Way Streets
  3. 5.8 Properties
  4. WebService综述
  5. HashMap源码分析(Java8)
  6. 看懂ios命名规则
  7. [HTML/CSS]uploadify自定义按钮样式
  8. zk介绍
  9. 【mybatis】mybatis方法访问报错:org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.pisen.cloud.luna.ms.goods.base.domain.GoodsConfigQuery
  10. 【js】判断浏览器是否IE浏览器