Sql获取第一天、最后一天

昨天面试一家公司,上机题目中要求获取每月最后一笔订单。用到了日期的选择性查询,回来在ITeye上找到了这篇文章。

原文: http://new-fighter.iteye.com/blog/1758723

① 本月第一天(--减去今天再加上1天)

Sql代码  

SELECT DATEADD(DD,-DAY(GETDATE())+1,GETDATE())

②本月最后一天

Sql代码  

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天当然也会存在这样的问题,只要稍微改动一下,在减天数的时候不应减当前时间 
的天数,而应减去加了月份之后的天数,如下写法:

Sql代码  

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符合 
正确性。

③本周的星期一  

Sql代码  

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

本周的最后一天(星期天)

Sql代码  

select dateadd(wk,(SELECT DATEDIFF(wk,0,GETDATE())),6)

④一年的第一天 
  现在用年(yy)的时间间隔来显示这一年的第一天。

Sql代码  

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

⑤季度的第一天 
  假如你要计算这个季度的第一天,这个例子告诉你该如何做。

Sql代码  

SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

6一年的最后一天 
  现在用年(yy)的时间间隔来显示这一年的最后一天。 很简单,先算出这一年的第一天, 
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0),然后加一年减一天,即是本年的最后一天

Sql代码  

SELECT DATEADD(DD,-1,DATEADD(YY,1,DATEADD(YY,DATEDIFF(YY,0,GETDATE()),0)))

Instance:按照每月的25日为本月的最后一天,算本月的第一天和最后一天。(上月26到这月25)

Sql代码  

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))

时间: 2024-11-05 13:43:20

Sql获取第一天、最后一天的相关文章

SQL Server中获取第一天、最后一天

获取已知年份的第一天和最后一天 1.一个月第一天的 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 3.一年的第一天 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 4.季度的第一天 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 5.当天的

获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)

获取周的第一天,最后一天 System.out.println(getStartEndDate("2016-05-01", 1)); 获取星期的第一天和最后一天 System.out.println(getStartEndDate("2016-05-01", 0)); public static String getStartEndDate(String aDay, int type) { SimpleDateFormat df = new SimpleDateFo

java获取当前时间,本周第一和最后一天,本月第一和最后一天,工具类

package com.banksteel.openerp.commons.utils; import java.text.SimpleDateFormat; import java.util.Calendar; public class CalendarUtils { /** * @description:获取当前的时间 * @param pattern 时间格式 * @return 当前的时间 * @author: * @createTime:2016年12月13日 下午4:36:32 */

灵动标签的用法 ecms通过执行sql获取需要的记录

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

通过后台SQL获取分页数据,在使用VUE-Element-Table 表格选择多行数据时,怎样在

在项目中,分页是由后台SQL获取.在table表格多选时,容易把选中的值传给后台,但是怎样在返回上一页时怎样记住表格多选的数据?? 当返回第二页时,应该把第一条数据再选中,保持选择状态. 具体思路:在页面不重新刷新加载时,使用二维数组保存el-table表格多选结果.其中一维下标记录页码,二维下标记录选中的数据. 说明:tableLoad()函数,this.tableData---通过Ajax获取本页码的列表数据 说明:handleSelectionChange()----选择变化时触发的事件方

获取第一个子元素 屏蔽浏览器的差异

//获取第一个子元素 屏蔽浏览器的差异 function getFirstElementChild(element){ //能力检测 判断是否支持firstElementChild if(element.firstElementChild){ //支持返回元素 return element.firstElementChild; }else{ //不知此判断下一个兄弟节点 var node = element.firstChild; while(node && node.nodeType !

【JSP EL】EL表达式 获取list长度/不用循环,EL在List中直接获取第一项的内容/EL获取Map的键,Map的值

1.EL表达式 获取list长度 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <c:if test="${fn:length(list名字)>1}"&g

jquery如何获取第一个或最后一个子元素?

jquery如何获取第一个或最后一个子元素? 通过children方法,children("input:first-child") $(this).children("input:first-child").val(); $(this).children("input:last-child").val(); 通过>选择器,$(".items>input:first") 在这里转一篇<jQuery选择元素的方法

每天进步一点点之SQL 获取表中某个时间字段离当前时间最近的几条

实际中用到的SQL: select * from (select top 3 Id, case when startSignup>GETDATE() then '敬请期待' when (startSignup<GETDATE() and  endsignUp>=getdate()) then '正在报名'  when (StartDate<GETDATE() and EndDate>=GETDATE())or (StartDate<GETDATE() and EndDa