SQL SERVER 日期和時間資料型別及函式 (Transact-SQL)

一曲轻扬發表於2024-04-01
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');

相關文章