Sql获取第一天、最后一天
昨天面试一家公司,上机题目中要求获取每月最后一笔订单。用到了日期的选择性查询,回来在ITeye上找到了这篇文章。
原文: http://new-fighter.iteye.com/blog/1758723
① 本月第一天(--减去今天再加上1天)
SELECT DATEADD(DD,-DAY(GETDATE())+1,GETDATE())
②本月最后一天
SELECT DATEADD(DD,-DAY(DATEADD(M,1,GETDATE())),DATEADD(M,1,GETDATE()))
备注:
本月最后一天:select dateadd(dd,-day(getdate()),dateadd(m,1,getdate()))
上面的这一句就有问题了,一般的想法是取最后一天,可以在当前时间上加一个月,然后减去当前
时间的天数,比如随便2009-8-27,加一个月就是2009-9-27,然后减去2009-8-27时间的天数27天 正好是2009-8-31,没问题呀。但是,
如果当前时间本身就是最后一天的话,就会产生临界问题了,比如传入的实际是2009-5-31,最终得到的最后一天的时间其实也应该是
2009-5-31才对,如果按照上面的写法,2009-5-31加一个月是多少,2009-6-31?2009-7-1?都不是,由于月大月小的问题,6月份只有
30天,所以2009-5-31加一个月后是2009-6-30日,还是按上面的写法然后再减去2009-5-31时间的天数31天,最终得到的最后一天是
2009-5-30,傻眼了,咋回事啊?还有2月只有28或29天当然也会存在这样的问题,只要稍微改动一下,在减天数的时候不应减当前时间
的天数,而应减去加了月份之后的天数,如下写法:
select dateadd(dd,-day(dateadd(m,1,getdate())),dateadd(m,1,getdate()))
这样的话,即使6月没有31天,2009-6-30减去30天就是2009-5-31,再如2009-1-30加一个月是2009-2-28,减去28天后是2009-1-31符合
正确性。
③本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
本周的最后一天(星期天)
select dateadd(wk,(SELECT DATEDIFF(wk,0,GETDATE())),6)
④一年的第一天
现在用年(yy)的时间间隔来显示这一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
⑤季度的第一天
假如你要计算这个季度的第一天,这个例子告诉你该如何做。
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
6一年的最后一天
现在用年(yy)的时间间隔来显示这一年的最后一天。 很简单,先算出这一年的第一天,
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0),然后加一年减一天,即是本年的最后一天
SELECT DATEADD(DD,-1,DATEADD(YY,1,DATEADD(YY,DATEDIFF(YY,0,GETDATE()),0)))
Instance:按照每月的25日为本月的最后一天,算本月的第一天和最后一天。(上月26到这月25)
DECLARE @MonthBaseDate DateTime;
DECLARE @MonthBeginDate DateTime;
DECLARE @MonthEndDate DateTime;
SET @MonthBaseDate=GETDATE();
IF(DAY(@MonthBaseDate)>=26)
SET @MonthBaseDat =DATEADD(DD,6,@MonthBaseDate);
Select @MonthBeginDate= DATEADD(dd,25, DATEADD(mm,DATEDIFF(mm,0,DATEADD(mm,-1,GETDATE())),0)),@MonthEndDate=DATEADD(dd,24,DATEADD(mm, DATEDIFF(MM,0,GETDATE()),0))
Sql获取第一天、最后一天的更多相关文章
- SQL获取第一天最后一天
DECLARE @dtdatetime SET @dt=GETDATE() DECLARE @number int --1.指定日期该年的第一天或最后一天 --A. 年的第一天 SELECTCONVE ...
- java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)
获取周的第一天,最后一天 System.out.println(getStartEndDate("2016-05-01", 1)); 获取星期的第一天和最后一天 System.ou ...
- 编程乐趣:C#获取日期所在周、月份第一和最后一天
原文:编程乐趣:C#获取日期所在周.月份第一和最后一天 写了个小功能,需要用到以周为时间段,于是写了个获取周第一和最后一天的方法,获取月份的第一和最后一天就比较简单了.代码如下: public cla ...
- 获取每月第一天最后一天 java
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //获取前月的第一天 Calendar cal_1=Ca ...
- 【HANA系列】SAP HANA SQL获取当前日期最后一天
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取当前 ...
- 【HANA系列】SAP HANA SQL获取当前月的第一天
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取当前 ...
- MYSQL中取当前年份的第一天和当前周,月,季度的第一天/最后一天
mysql 获取当年第一天的年月日格式:SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY); MySQL里获取当前week.month ...
- JS获取当年当月最后一天日期
<html xmlns="http://www.w3.org/1999/xhtml" > <meta charset="UTF-8"> ...
- SQL获取当月天数的几种方法
原文:SQL获取当月天数的几种方法 日期直接减去int类型的数字 等于 DATEADD(DAY,- 数字,日期) 下面三种方法: 1,日期加一个月减去当前天数,相当于这个月最后一天的日期.然后获取天数 ...
随机推荐
- CRM 2011 Install Errors - Tips and Tricks continued(转)
The more I get to install/upgrade to CRM 2011 in different environment the more I come across differ ...
- 给jar包进行数字签名(2014-06-28记)
整理一下两年前用到的一些资料. 为了使Applet或者Java Web Start程序能够访问客户端本地资源,需要对Applet或者JWS程序jar包进行数据签名,当客户端打开Applet或者JWS程 ...
- [LeetCode_1] twoSum
LeetCode: 1. twoSum 题目描述 Given an array of integers, return indices of the two numbers such that the ...
- ambari之hbase数据迁移
一.hbase原理剖析 Base是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...
- src url href uri的区别和联系
- 我的android学习经历33
在Activity中添加菜单 1.在res目录下新建文件夹menu 右击res,选择new->Folder,Folder name写为menu 2.在新建的menu目录下新建一个xml文件 右击 ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序实现继承
这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第十一篇:为ASP.NET MVC应用程 ...
- 03-第一个C语言程序的分析
本文目录 一.代码分析 二.开发和运行C程序的步骤 三.总结 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语 ...
- (转载)U-boot启动完全分析
1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø ...
- spring aop搭建redis缓存
SpringAOP与Redis搭建缓存 近期项目查询数据库太慢,持久层也没有开启二级缓存,现希望采用Redis作为缓存.为了不改写原来代码,在此采用AOP+Redis实现. 目前由于项目需要,只需要做 ...