1. 日期函数
https://www.cnblogs.com/kissdodog/p/3141218.html
1)当前日期
Select Getdate()
2) 当前UTC时间
Select GetUTCDate()
3) 获取当前日期的年、月、日及其任意部分
Select Year/Month/Day(GetDate())
Select Datepart(YYMM, date类型的字段)
4)日期-加 DATEADD
Select Dateadd(yyyy,10,getdate()) 【datepart,数字(可以是负整数),日期格式的字段】
5)日期差 -减 DATEDIFF
Select Datediff(yyyy, '2019-1-1', '2020-12-31') 【detepart, 开始日期,结束日期】
6)判断是否是日期值
Select ISDATE('2020-1-1')
2. 日期转换函数
https://www.cnblogs.com/mslong/p/13790271.html
https://blog.csdn.net/findmyself_for_world/article/details/50730317
1)Convert
Convert(nvarchar(100), getdate(), 112) 【长度,原来的日期列,转换后的类型】
(112:20200929; 111: 2020/09/29; 120:2011-03-15 10:55:57
2) Format
Format(getdate(), 'yyyy-MM-dd') 【原日期列,转换后的日期格式】
3)截取日期
第一部分的Year month day datepart
4)周相关
获取本周一
Select DATEADD(WK, DATEDIFF(WK, 0, GETDATE()), 0) as "星期一“
获取本周二
SELECT DATEADD(WK, DATEDIFF(WK,0,GETDATE()), 1) AS "星期二"
获取本周天
Select DATEADD(WK, DATEDIFF(WK, 0, GETDATE()), 6) as "星期日“
5)月相关
获取本月最后一天
SELECT EOMONTH(GETDATE(),0)
获取下个月最后一天
SELECT EOMONTH(GETDATE(),1)
获取上个月最后一天
SELECT EOMONTH(GETDATE().-1)
获取本月第一天
SELECT DATEADD(DAY,1,EOMONTH(GETDATE().-1))
/* 另一种写法*/
SELECT DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0) AS "本月第一天"
// 意思是:①获取当前日期 ②求当前日期与0(1900-1-1 0:00:00)的月份差 ③求0往上加这些月份。=> 本月第一天
SELECT DATEADD(MS, -3, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0) ) AS "上月最后一天"
//sql server时间精确到3毫秒,所以第一天-3ms = 昨天
6)季/年相
本季度第一天
SELECT DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()),0)
本季度最后一天
SELECT DATEADD(MS, -3, DATEADD(QQ,DATEDIFF(QQ, 0, GETDATE())+1,0))
上季度第一天
SELECT DATEADD(QQ, DATEDIFF(QQ,0,GETDATE()-1),0)
本年第一天
SELECT DATEADD(YY, DATEDIFF(YY,0,GETDATE()),0)
//用固定日期格式
SELECT CONVERT(NVARCHAR(100), DATEADD(YY, DATEDIFF(YY,0,GETDATE()),0), 112)
SELECT FORMAT(DATEADD(YY, DATEDIFF(YY,0,GETDATE()),0), 'yyyy-MM-dd')
本年最后一天
SELECT DATEADD(MS, -3, DATEADD(YY, DATEDIFF(YY, 0, GETDATE()+1),0)) AS "最后一天"
SELECT CONVERT(NVARCHAR(100), DATEADD(MS, -3, DATEADD(YY, DATEDIFF(YY, 0, GETDATE()+1),0)) , 112) AS "最后一天"