SQL SERVER 日期和时间数据类型及函数 (Transact-SQL)
declare @time1 datetime=getdate() --代码 declare @time2 datetime=getdate() SELECT DATEDIFF(year, @TIME1,@TIME2); SELECT DATEDIFF(quarter, @TIME1,@TIME2); SELECT DATEDIFF(month, @TIME1,@TIME2); SELECT DATEDIFF(dayofyear, @TIME1,@TIME2); SELECT DATEDIFF(day, @TIME1,@TIME2); SELECT DATEDIFF(week, @TIME1,@TIME2); SELECT DATEDIFF(hour, @TIME1,@TIME2); SELECT DATEDIFF(minute, @TIME1,@TIME2); SELECT DATEDIFF(second, @TIME1,@TIME2); SELECT DATEDIFF(millisecond, @TIME1,@TIME2); SELECT DATEDIFF(microsecond, @TIME1,@TIME2); --结束减开始时间 --datetime类型 --declare @d3 datetime='2023-10-13 14:31:38.100' --declare @d4 datetime='2023-10-13 14:32:32.673' --select GETDATE() --datetime2类型 DECLARE @d3 datetime2 = '2023-10-13 14:46:03.4597353'; DECLARE @d4 datetime2 = '2023-10-13 14:46:53.1234567'; --SELECT SYSDATETIME() AS CurrentDateTime2; DECLARE @diffInSeconds INT = DATEDIFF(SECOND, @d3, @d4) DECLARE @diffInMilliseconds INT = DATEDIFF(MILLISECOND, @d3, @d4) DECLARE @diffInMicroseconds INT = DATEDIFF(MICROSECOND, @d3, @d4) SELECT CONCAT( CASE WHEN @diffInSeconds >= 31536000 THEN CONCAT(@diffInSeconds / 31536000, '年 ') ELSE '' END, CASE WHEN (@diffInSeconds / 2592000) % 12 > 0 THEN CONCAT((@diffInSeconds / 2592000) % 12, '月 ') ELSE '' END, CASE WHEN (@diffInSeconds / 86400) % 30 > 0 THEN CONCAT((@diffInSeconds / 86400) % 30, '日 ') ELSE '' END, CASE WHEN (@diffInSeconds / 3600) % 24 > 0 THEN CONCAT((@diffInSeconds / 3600) % 24, '小时 ') ELSE '' END, CASE WHEN (@diffInSeconds / 60) % 60 > 0 THEN CONCAT((@diffInSeconds / 60) % 60, '分 ') ELSE '' END, CASE WHEN @diffInSeconds % 60 > 0 THEN CONCAT(@diffInSeconds % 60, '秒 ') ELSE '' END, CASE WHEN @diffInMilliseconds % 1000 > 0 THEN CONCAT(@diffInMilliseconds % 1000, '毫秒 ') ELSE '' END, CASE WHEN @diffInMicroseconds % 1000 > 0 THEN CONCAT(@diffInMicroseconds % 1000, '微秒') ELSE '' END ) AS [TimeDifference];
返回值类型 datetime2(7) SYSDATETIME() 返回包含计算机的日期和时间的 datetime2(7) 值,SQL Server 的实例正在该计算机上运行 SYSDATETIMEOFFSET() 返回包含计算机的日期和时间的 datetimeoffset(7) 值,SQL Server 的实例正在该计算机上运行。时区偏移量包含在内。 SYSUTCDATETIME() 返回包含计算机的日期和时间的 datetime2 值,SQL Server 的实例正在该计算机上运行。 日期和时间作为 UTC 时间(通用协调时间)返回。 返回值类型 datetime CURRENT_TIMESTAMP 返回包含计算机的日期和时间的 datetime 值,SQL Server 的实例在该计算机上运行。 返回值不包括时区偏移量。 GETDATE() 返回包含计算机的日期和时间的 datetime 值,SQL Server 的实例在该计算机上运行。 返回值不包括时区偏移量。 GETUTCDATE(); 返回包含计算机的日期和时间的 datetime 值,SQL Server 的实例在该计算机上运行。 该函数返回日期和时间作为 UTC 时间(协调世界时)。
SELECT SYSDATETIME() , SYSDATETIMEOFFSET() , SYSUTCDATETIME() , CURRENT_TIMESTAMP , GETDATE() , GETUTCDATE(); SELECT CONVERT (date, SYSDATETIME()) ,CONVERT (date, SYSDATETIMEOFFSET()) ,CONVERT (date, SYSUTCDATETIME()), CONVERT (date, CURRENT_TIMESTAMP),CONVERT (date, GETDATE()),CONVERT (date, GETUTCDATE()); SELECT CONVERT (time,SYSDATETIME()),CONVERT (time,SYSDATETIMEOFFSET()),CONVERT (time,SYSUTCDATETIME()), CONVERT (time,CURRENT_TIMESTAMP),CONVERT (time,GETDATE()),CONVERT (time,GETUTCDATE()); ------------------------------------------------------------------------- declare @day varchar(100) set @day='2021-01-31 ' select DATEPART(dw,GETDATE()),CONVERT(nvarchar(50),GETDATE(),120) select datename(dw,GETDATE()),CONVERT(nvarchar(50),GETDATE(),120) select datename(dw, @day),CONVERT(nvarchar(50), @day,120) select datename(dw,GETDATE()) select (convert(varchar(20),getdate()-1, 120)) --2021-01-28 15:58:26 select dateName(DD,getdate()-1) --28 --上个月1号 select CONVERT(varchar(7), dateadd(mm,-1,getdate()) , 120) + '-1' --本月1号 select CONVERT(varchar(7), getdate() , 120) + '-1' --下个月1号 select CONVERT(varchar(7), dateadd(mm,1,getdate()) , 120) + '-1' --本月天数 select day(dateadd(mm,1,getdate())-day(getdate())) ------------------------------------------------------------------------- CONVERT(data_type,expression[,style]) convert(varchar(10),字段名,转换格式) 说明: 此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar) 相互转换的时候才用到. 语句 结果 SELECT CONVERT(varchar(100), GETDATE(), 0) 07 15 2009 4:06PM SELECT CONVERT(varchar(100), GETDATE(), 1) 07/15/09 SELECT CONVERT(varchar(100), GETDATE(), 2) 09.07.15 SELECT CONVERT(varchar(100), GETDATE(), 3) 15/07/09 SELECT CONVERT(varchar(100), GETDATE(), 4) 15.07.09 SELECT CONVERT(varchar(100), GETDATE(), 5) 15-07-09 SELECT CONVERT(varchar(100), GETDATE(), 6) 15 07 09 SELECT CONVERT(varchar(100), GETDATE(), 7) 07 15, 09 SELECT CONVERT(varchar(100), GETDATE(), 8) 16:06:26 SELECT CONVERT(varchar(100), GETDATE(), 9) 07 15 2009 4:06:26:513PM SELECT CONVERT(varchar(100), GETDATE(), 10) 07-15-09 SELECT CONVERT(varchar(100), GETDATE(), 11) 09/07/15 SELECT CONVERT(varchar(100), GETDATE(), 12) 090715 SELECT CONVERT(varchar(100), GETDATE(), 13) 15 07 2009 16:06:26:513 SELECT CONVERT(varchar(100), GETDATE(), 14) 16:06:26:513 SELECT CONVERT(varchar(100), GETDATE(), 20) 2009-07-15 16:06:26 SELECT CONVERT(varchar(100), GETDATE(), 21) 2009-07-15 16:06:26.513 SELECT CONVERT(varchar(100), GETDATE(), 22) 07/15/09 4:06:26 PM SELECT CONVERT(varchar(100), GETDATE(), 23) 2009-07-15 SELECT CONVERT(varchar(100), GETDATE(), 24) 16:06:26 SELECT CONVERT(varchar(100), GETDATE(), 25) 2009-07-15 16:06:26.513 SELECT CONVERT(varchar(100), GETDATE(), 100) 07 15 2009 4:06PM SELECT CONVERT(varchar(100), GETDATE(), 101) 07/15/2009 SELECT CONVERT(varchar(100), GETDATE(), 102) 2009.07.15 SELECT CONVERT(varchar(100), GETDATE(), 103) 15/07/2009 SELECT CONVERT(varchar(100), GETDATE(), 104) 15.07.2009 SELECT CONVERT(varchar(100), GETDATE(), 105) 15-07-2009 SELECT CONVERT(varchar(100), GETDATE(), 106) 15 07 2009 SELECT CONVERT(varchar(100), GETDATE(), 107) 07 15, 2009 SELECT CONVERT(varchar(100), GETDATE(), 108) 16:06:26 SELECT CONVERT(varchar(100), GETDATE(), 109) 07 15 2009 4:06:26:513PM SELECT CONVERT(varchar(100), GETDATE(), 110) 07-15-2009 SELECT CONVERT(varchar(100), GETDATE(), 111) 2009/07/15 SELECT CONVERT(varchar(100), GETDATE(), 112) 20090715 SELECT CONVERT(varchar(100), GETDATE(), 113) 15 07 2009 16:06:26:513 SELECT CONVERT(varchar(100), GETDATE(), 114) 16:06:26:513 SELECT CONVERT(varchar(100), GETDATE(), 120) 2009-07-15 16:06:26 SELECT CONVERT(varchar(100), GETDATE(), 121) 2009-07-15 16:06:26.513 SELECT CONVERT(varchar(100), GETDATE(), 126) 2009-07-15T16:06:26.513 SELECT CONVERT(varchar(100), GETDATE(), 130) 23 ??? 1430 4:06:26:513PM SELECT CONVERT(varchar(100), GETDATE(), 131) 23/07/1430 4:06:26:513PM
--时间比较(毫秒数) DATEDIFF(MS, '1970-01-01 08:00:00.000', '2022-06-06 12:30:30.555');