常用日期转换 常用日期函数
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));