转自:http://www.dotblogs.com.tw/lastsecret/archive/2010/10/04/18097.aspx

上個星期去Tech-Day聽了幾場有趣的課,其中一堂是楊志強老師的

"深入了解T-SQL",講的很棒,雖然是第一堂八點四十的課,但講得很精采,讓我越聽越有精神。

今天來寫一個當天的範例,應該很多人看過,但我覺得語法滿有趣的。

用DATEADD及DATEDIFF組合起來,可以算出一季或是一個月的最後一天等等…

首先先分別來說明DATEADD及DATEDIFF

DATEDIFF是算兩個日期間的間隔,傳回帶正負號的整數

DATEDIFF ( datepart , startdate , enddate )

datepart為間隔的單位,startdate跟enddate應該看字面的意思就知道了吧。

因此如果語法寫

SELECT DATEDIFF(DAY, '2010-10-03','2010-10-04'  )

出來的結果就是 1,代表相隔一天。

DATEADD是計算某日期加上一個數值,傳回的日期

DATEADD (datepart , number , date )

datepart一樣是單位,number是指定的數值,date是要被加上的原始日期

SELECT DATEADD(MONTH,2,'2010-10-06')

傳回的結果是2010-12-06 00:00:00.000

講解完這兩個函數使用之後,接著開始解釋某月的第一天怎麼計算

不過還是要再解釋一個東西

如果今天將0轉為datetime,如 select CONVERT(datetime,0,112)

出來的結果會是1900-01-01 00:00:00.000

因此我們將會用這個數值為基準

首先先計算今天到1900-01-01相差幾個月

語法是

SELECT DATEDIFF(MONTH,0,GETDATE())

算出來的數值是1329,代表相差了1329個月

再來將 1900-01-01加上1329個月,結果出來就是這個月的第一天了!

SELECT  DATEADD(MONTH,  DATEDIFF(MONTH,0,GETDATE()) ,0)

結果:2010-10-01 00:00:00.000

用這個方法就可以算出很多種不同的結果

例如如果是每個月最後一天的話,就是

SELECT DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE() ), -1)

原理是先算出今天跟 1899-12-31的月份差距( -1代表1899-12-31,-2就是1899-12-30依此類推)

接著再將1899-12-31加上月份差距,答案就是2010-10-31 00:00:00.000

如果是當季的最後一天,如下

SELECT DATEADD(QUARTER, DATEDIFF(QUARTER, -1,GETDATE() ), -1)

還有很多運用,就看自己怎麼發揮囉。

參考連結:

我的Coding之路-每日一SQL-善用DATEADD和DATEDIFF

保哥-如何用簡單的 SQL 技巧取得特定日期是否為週末假日

每日一SQL-善用DATEADD和DATEDIFF的更多相关文章

  1. DATEADD和DATEDIFF函数、其他日期处理方法 、已打开的端口、FORMAT函数

    DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.FORMAT函数 DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.Format函数 KeyLife富翁笔 ...

  2. DATEADD(Day, DATEDIFF(Day,0,ShippingTime), 0)

    select DATEADD(Day, DATEDIFF(Day,0,GETDATE()), 0),DATEDIFF(Day,0,GETDATE()),GETDATE() 结果: (无列名) (无列名 ...

  3. SQL Server DATEADD() 函数 一步步使用教程

    SQL Server DATEADD() 函数 DATEADD() 函数在日期中添加或减去指定的时间间隔. DATEADD(datepart,number,date)date 参数是合法的日期表达式. ...

  4. DATEADD和DATEDIFF

    DateAdd函数 返回 返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔. 语法 DateAdd(interval, number, date) DateAdd 函数语 ...

  5. SQL Server DATEADD() 函数

    SQL Server Date 函数 定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔. 语法 DATEADD(datepart,number,date) date 参数是合法的日 ...

  6. sql server dateadd()

    定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔. 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式.number 是您希望添加的 ...

  7. sql server 日期处理datediff

    语法: DATEDIFF(datepart,startdate,enddate) datepart 参数可以是下列的值: date-part : year | quarter | month | we ...

  8. sql 函数 DATEADD 使用

    DATEADD ( datepart , number, date ) 在日期中添加或减去指定的时间间隔.   datepart 是规定应向日期的哪一部分返回新值的参数. number 为要增加或减去 ...

  9. Sql server DATEADD日期函数的使用

    DATEADD日期函数 DATEADD() 函数在日期中添加或减去指定的时间间隔. 日:在当前日期上加两天 , ,'2014-12-30') 月:在当前日期上加两个月 , , 年:在当前日期上加两年 ...

随机推荐

  1. NSTimer scheduledTimerWithTimeInterval与timerWithTimeInterval、initWithFireDate的区别

    英文原文是这样的: A timer object can be registered in only one run loop at a time, although it can be added ...

  2. iOS UIWebView和网页的交互(OC中调执行JS)

    UIWebView和网页的交互(OC中调执行JS)- (void)viewDidLoad{[super viewDidLoad];// 1.webViewUIWebView *webView = [[ ...

  3. 关于破解IDEA

    博客的意义就在于分享 哈哈 今天想装个 IDEA玩玩 去官网 下了个 安装包 想破解 结果度娘 帮解决了 直接po方法 很简单 就是安装好注册的时候 选择 License server ,填 http ...

  4. iOS开发之网络数据解析(一)--JSON解析简介

    前言:对服务器请求之后,返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 本篇随便先讲解JSON解析. 正文: 关于JSON: JSON是一种轻量级的数据格式,一般用于数据交互 ...

  5. 很好的UI动效设计参考

    toolBar下拉:

  6. MSLocalDB

    今天用MSLocalDB做测试,发现保存的中文都变成了??,基本可以确定是排序规则的问题,LocalDB建库默认使用Latin规则,需要改为Chinese_PRC_CI_AS,为了修改规则,需要先修改 ...

  7. 《HTML5与CSS3实例教程》

    <HTML5与CSS3实例教程> 基本信息 作者: (美)Brian P. Hogan 译者: 卢俊祥 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:97871153634 ...

  8. 一个SharePoint定时器 (SPJobDefinition)

    需要写一个自定义的sharepoint timer job, 目的是要定时到Site Collection Images这个List里检查图片的过期日期,如果即将过期的话,需要发送email到相关的人 ...

  9. Servlet生命周期+工作原理

    Servlet生命周期+工作原理 1.Servlet的生命周期:     Servlet加载,加载,服务,销毁. 2.典型函数解释:     Init():这个函数是用来初始化Servlet对象的.在 ...

  10. pycharm 4.5在debian下安装

    1.去官网下载linux下的Tar包,下载后解压. 2.直接进入解压后的folder里面找bin下面的pycharm.sh,执行后发现没有任何反应. 3.查询资料发现是因为pycharm需要sun j ...