sql dateadd 和datediff的用法
每日一SQL-善用DATEADD和DATEDIFF
上個星期去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的用法相关推荐
- SQL中DATEADD和DATEDIFF的用法
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天.你们大部分人大概都知道怎样把日期进行分割(年.月.日等),然后仅仅用分割出来的年.月.日等放在几个函 ...
- mysql sql dateadd_在SQL语句中DATEADD和DATEDIFF函数
在SQL语句中DATEADD和DATEDIFF函数 DateAdd函数 返回 返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔. 语法 DateAdd(interval, ...
- mysql2000日期加减,SQL日期处理函数DATEADD和DATEDIFF详解
SQL Server数据库中,DATETIME和SMALLDATETIME的值是存储为整数的.虽然如此,SQL Server数据库并不因此支持对这两种类型的值做数学运算. 不过,我们一定会有给日期或时 ...
- SQL中DATEADD和DATEDIFF的使用方法
DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期,DATEDIFF函数计算两个日期之间的小时.天.周.月.年等时间间隔总数. 1.SQL Server DATEADD() 函数 定义 ...
- sql中日期函数的用法
sql中日期函数的用法 <script src="http://blog.csdn.net/count.aspx?ID=1920773&Type=Rank" ty ...
- IsNull 和 SQL语句中CASE WHEN用法
[转]IsNull 和 SQL语句中CASE WHEN用法收藏 [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL 使用指定的替换值替换 NULL. ...
- sqlserver中的dateadd和datediff
1.获取当前日期 -- 1.获取当前日期 select GETDATE() -- 2.获取当前日期并格式化 select CONVERT(varchar(10),GETDATE(),120) -- 3 ...
- SQL SERVER日期函数详细用法
1.一个月第一天的 Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 Select DATEADD(wk, DATEDIFF(wk,0, ...
- 关于dateadd与datediff的使用方法
关于dateadd与datediff的使用方法 DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期,DATEDIFF函数计算两个日期之间的小时.天.周.月.年等时间间隔总数. 1.SQ ...
最新文章
- Asp.net(C#)-彩色图片转化为黑白
- 【计算机科学基础】控制复杂性的艺术
- [JavaScript] promise中.then()方法
- PHP学习总结(13)——PHP入门篇之常量
- 不能使用泛型的形参创建对象_数据类型之----泛型
- [CF808B] Average Sleep Time([强行]树状数组,数学)
- 网络体系结构——ISO/OSI参考模型
- 苹果mac菜单栏应用管理软件Bartender 让Mac选项列不再拥挤
- c语言中字母后面的 是什么意思,C语言中括号里面一个字母是什么意思
- 300多分学计算机去哪个学校,300分能上什么大学 2021年300分左右的学校
- java编程思想笔记(一)——面向对象导论
- 等保三级密码技术应用要求 GM/T 0054-2018
- vue-自定义组件之组件的继承
- CentOS 添加微软雅黑字体
- Java实现桐桐的数学难题
- 苹果微信换行怎么打_微信空白朋友圈怎么发?安卓苹果双平台教程
- Mob研究院 |2019互联网医疗行业洞察
- java 公交管理系统 代码_基于jsp的公交管理系统-JavaEE实现公交管理系统 - java项目源码...
- 石油专业:一文入门机器学习,以测井岩性分类预测为例
- AutoDYN学习笔记---Part_1
热门文章
- 智能指纹门锁芯片方案技术开发
- 爱情顾问岗,雷哥成功拿到了offer
- 25_ue4实现二段跳,加速跑和瞬移
- 一个tomcat下有多个应用时 多个Context启动冲突的问题解决
- Focus和SetFocus、GetFocus、LoseFocus
- 图片饱和度更改,c#,winform
- A Comprehensive Survey on Graph Neural Networks(图神经网络综合研究)
- Trick and Magic(OO博客第二弹)
- liferay6.2 mysql_liferay6.2 集成CKEditor和ckfinder
- 基础测绘计算函数设计(坐标正反算、交会计算)