常用日期转换 常用日期函数
1. CONVERT日期格式轉換(年月日 时分秒 毫秒):
SELECT CONVERT(VARCHAR(100), GETDATE(), 120); --【120】2011-03-15 10:55:57(yyyy-MM-dd HH:mm:ss)
SELECT CONVERT(VARCHAR(100), GETDATE(), 23); --【23】2020-09-29,【102】2020.09.29,【111】2020/09/29,【112】20200929
SELECT CONVERT(VARCHAR(100), GETDATE(), 24); --【24】11:46:53
SELECT DATEDIFF(DAY, '2020-01-01', '2020-02-02') AS '間隔時間(天數)'; --31 获取两个日期之间的间隔(天數)
SELECT GETDATE() AS '东八区时间', GETUTCDATE() AS 'UTC时间'; --获取UTC时间(UTC時間比東八區時間早8小時)
2. FORMAT日期格式轉換(年月日 时分秒 毫秒):
DECLARE @DATE DATETIME = GETDATE();
SELECT FORMAT(@DATE, 'D', 'EN-US') AS 'US ENGLISH RESULT',
FORMAT(@DATE, 'D', 'ZH-CN') AS 'SIMPLIFIED CHINESE (PRC) RESULT',
FORMAT(@DATE, 'yyyy-MM-dd') AS 当前日期, --注意yyyy-MM-dd大小写
FORMAT(@DATE, 'yyyy-MM-dd HH:mm:ss') AS 当前时间, --注意MM或者dd单双的区别
FORMAT(@DATE, 'yyyy-MM-dd HH:mm:ss.fff') AS 当前时间,
FORMAT(@DATE, 'yyyyMMddHHmmss') AS 当前时间,
FORMAT(@DATE, 'yyyyMMddHHmmssfff') AS 当前时间,
FORMAT(@DATE, 'yyyy年MM月dd日 HH时mm分ss秒') AS 中文时间;
3. 截取日期
--截取日期:截取年、截取月、截取日、截取小时、截取分钟
SELECT YEAR(GETDATE()) AS YEAR,
MONTH(GETDATE()) AS MONTH,
DAY(GETDATE()) AS DAY; --2011 3 15
SELECT DATEPART(YEAR, GETDATE()) AS YEAR, -- 年 2018
DATEPART(MONTH, GETDATE()) AS MONTH, -- 月 12
DATEPART(DAY, GETDATE()) AS DAY, -- 日 1
DATEPART(HOUR, GETDATE()) AS HOUR, -- 时 21
DATEPART(MINUTE, GETDATE()) AS MINUTE, -- 分 02
DATEPART(SECOND, GETDATE()) AS SECOND; -- 秒 33
SELECT DATEFROMPARTS(2020, 12, 20) AS DATEVALUE; --2020-12-20
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. 本相关日期
--本月第一天、最后一天、下个月最后一天 EOMONTH 语法
SELECT EOMONTH(GETDATE(), -1) AS '上一月最后一天',
DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)) AS '本月第一天',
EOMONTH(GETDATE(), 0) AS '本月最后一天',
EOMONTH(GETDATE(), 1) AS '下一月最后一天',
EOMONTH(GETDATE(), 2) AS '下两月最后一天';
--本月第一天
SELECT DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0)
SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + '01')
SELECT CONVERT(VARCHAR(7), GETDATE(), 120) + '-01'; --2011-04-01
--本月最后一天
SELECT DATEADD(MS, -3, DATEADD(MM, DATEDIFF(M, 0, GETDATE()) + 1, 0));
SELECT DATEADD(DAY, -1, CONVERT(CHAR(6), DATEADD(MONTH, 1, GETDATE()), 112) + '01');
SELECT CONVERT(VARCHAR(10), DATEADD(DAY, -1, CONVERT(CHAR(7), DATEADD(MONTH, 1, GETDATE()), 120) + '-01'), 120); --2011-04-30
--上月的最后一天
SELECT DATEADD(MS, -3, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0));
--本月的第一个星期一
SELECT DATEADD (WK , DATEDIFF ( WK ,0 , DATEADD( DD , 6- DATEPART(DAY ,GETDATE ()), GETDATE()) ), 0)
6. 季/年相关日期
--季度第一天 和 最后一天
SELECT DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()), 0);
--获得当前是第几季度
SELECT DATEPART (QUARTER ,GETDATE())
--年第一天 和 最后一天
SELECT DATEADD(YY, DATEDIFF(YY, 0, GETDATE()), 0);
SELECT CONVERT (DATETIME ,CONVERT( CHAR( 4 ),GETDATE (), 120)+ '0101' )
SELECT CONVERT (DATETIME ,CONVERT( CHAR( 4 ),GETDATE (), 120)+ '1231' )
SELECT DATEADD(MS, -3, DATEADD(YY, DATEDIFF(YY, 0, GETDATE()) + 1, 0));
--去年的最后一天
SELECT DATEADD(MS, -3, DATEADD(YY, DATEDIFF(YY, 0, GETDATE()), 0));