每日一SQL-善用DATEADD和DATEDIFF
转自: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-善用DATEADD和DATEDIFF的更多相关文章
- DATEADD和DATEDIFF函数、其他日期处理方法 、已打开的端口、FORMAT函数
DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.FORMAT函数 DATEADD和DATEDIFF函数.其他日期处理方法 .已打开的端口.Format函数 KeyLife富翁笔 ...
- DATEADD(Day, DATEDIFF(Day,0,ShippingTime), 0)
select DATEADD(Day, DATEDIFF(Day,0,GETDATE()), 0),DATEDIFF(Day,0,GETDATE()),GETDATE() 结果: (无列名) (无列名 ...
- SQL Server DATEADD() 函数 一步步使用教程
SQL Server DATEADD() 函数 DATEADD() 函数在日期中添加或减去指定的时间间隔. DATEADD(datepart,number,date)date 参数是合法的日期表达式. ...
- DATEADD和DATEDIFF
DateAdd函数 返回 返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔. 语法 DateAdd(interval, number, date) DateAdd 函数语 ...
- SQL Server DATEADD() 函数
SQL Server Date 函数 定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔. 语法 DATEADD(datepart,number,date) date 参数是合法的日 ...
- sql server dateadd()
定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔. 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式.number 是您希望添加的 ...
- sql server 日期处理datediff
语法: DATEDIFF(datepart,startdate,enddate) datepart 参数可以是下列的值: date-part : year | quarter | month | we ...
- sql 函数 DATEADD 使用
DATEADD ( datepart , number, date ) 在日期中添加或减去指定的时间间隔. datepart 是规定应向日期的哪一部分返回新值的参数. number 为要增加或减去 ...
- Sql server DATEADD日期函数的使用
DATEADD日期函数 DATEADD() 函数在日期中添加或减去指定的时间间隔. 日:在当前日期上加两天 , ,'2014-12-30') 月:在当前日期上加两个月 , , 年:在当前日期上加两年 ...
随机推荐
- NSTimer scheduledTimerWithTimeInterval与timerWithTimeInterval、initWithFireDate的区别
英文原文是这样的: A timer object can be registered in only one run loop at a time, although it can be added ...
- iOS UIWebView和网页的交互(OC中调执行JS)
UIWebView和网页的交互(OC中调执行JS)- (void)viewDidLoad{[super viewDidLoad];// 1.webViewUIWebView *webView = [[ ...
- 关于破解IDEA
博客的意义就在于分享 哈哈 今天想装个 IDEA玩玩 去官网 下了个 安装包 想破解 结果度娘 帮解决了 直接po方法 很简单 就是安装好注册的时候 选择 License server ,填 http ...
- iOS开发之网络数据解析(一)--JSON解析简介
前言:对服务器请求之后,返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 本篇随便先讲解JSON解析. 正文: 关于JSON: JSON是一种轻量级的数据格式,一般用于数据交互 ...
- 很好的UI动效设计参考
toolBar下拉:
- MSLocalDB
今天用MSLocalDB做测试,发现保存的中文都变成了??,基本可以确定是排序规则的问题,LocalDB建库默认使用Latin规则,需要改为Chinese_PRC_CI_AS,为了修改规则,需要先修改 ...
- 《HTML5与CSS3实例教程》
<HTML5与CSS3实例教程> 基本信息 作者: (美)Brian P. Hogan 译者: 卢俊祥 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:97871153634 ...
- 一个SharePoint定时器 (SPJobDefinition)
需要写一个自定义的sharepoint timer job, 目的是要定时到Site Collection Images这个List里检查图片的过期日期,如果即将过期的话,需要发送email到相关的人 ...
- Servlet生命周期+工作原理
Servlet生命周期+工作原理 1.Servlet的生命周期: Servlet加载,加载,服务,销毁. 2.典型函数解释: Init():这个函数是用来初始化Servlet对象的.在 ...
- pycharm 4.5在debian下安装
1.去官网下载linux下的Tar包,下载后解压. 2.直接进入解压后的folder里面找bin下面的pycharm.sh,执行后发现没有任何反应. 3.查询资料发现是因为pycharm需要sun j ...