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');

 

posted @ 2024-04-01 18:54  一曲轻扬  阅读(150)  评论(0编辑  收藏  举报