sqlserver日期函数学习总结

日期时间数据类型主要有:date,datetime,smalldatetime,datetime2,time;

date:精确到日期,如2019-01-01。

datetime:精确到毫秒(3位),如:2019-01-01 12:12:12.123。

smalldatetime:精确到分钟,秒的部分用00代替,如:2019-01-01 12:12:00

datetime2:精确到100纳秒(7位),如:2019-01-01 12:12:12.1234567

time:精确到时间,如:12:12:12.1234567

DECLARE @TIME AS TIME='12:12:12.1234567';
DECLARE @TIME2 AS TIME='12:12:12.123456789';

SELECT @TIME AS 'TIME'--结果12:12:12.1234567
SELECT @TIME2 AS 'TIME2'--结果会向四舍五入12:12:12.1234568

日期时间操作函数:SYSDATETIME,CURRENT_TIMESTAMP,GETDATE(),DATEADD,DATEDIFF,DATEPART

,YEAR,MONTH,DAY,ISDATE,DATEFROMPARTS,DATETIMEFROMPARTS,DATETIME2FROMPARTS,SMALLDATETIMEPARTS,TIMEFROMPARTS;

1.SYSTEMDATETIME() :返回datetime2类型

2.CURRENT_TIMESTAMP:返回datetime类型.标准SQL,返回类型与GETDATE()相同

3.GETDATE():返回datetime类型,非标准SQL


SELECT SYSDATETIME() AS 'SYSDATETIM',GETDATE() AS 'GETDATE',
CURRENT_TIMESTAMP AS 'CURRENT_TIMESTAMP';

--结果:
SYSDATETIM                  GETDATE                 CURRENT_TIMESTAMP
--------------------------- ----------------------- -----------------------
2019-04-28 17:09:25.6752697 2019-04-28 17:09:25.673 2019-04-28 17:09:25.673

4.DATEADD(datepart,num,date):给date指定的datepart部分加上num,返回新日期值。

DECLARE @DATE AS DATETIME2='2019-09-21 12:12:12.11111111';
SELECT DATEADD(DAY,1,@DATE) AS 'DAY',DATEADD(YEAR,1,@DATE) AS 'YEAR',DATEADD(MONTH,1,@DATE) AS 'MONTH',
		DATEADD(HOUR,1,@DATE)AS 'HOUR'

结果:
DAY                         YEAR                        MONTH                       HOUR
--------------------------- --------------------------- --------------------------- ---------------------------
2019-09-22 12:12:12.1111111 2020-09-21 12:12:12.1111111 2019-10-21 12:12:12.1111111 2019-09-21 13:12:12.1111111

5.DATEDIFF(datepart,startdate,enddate):返回 startdate 和 enddate 之间所跨的指定 datepart 边界的计数。


DECLARE @startdate datetime2 = '2007-05-05 00:00:00.9999999';  
DECLARE @enddate   datetime2 = '2007-05-05 01:59:59.9999999';   
SELECT DATEDIFF(day, @startdate, @enddate) AS 'DAY', DATEDIFF(HOUR, @startdate, @enddate) AS 'HOUR', DATEDIFF(MINUTE, @startdate, @enddate) AS 'MINUTE',DATEDIFF(SECOND,@startdate,@enddate) AS 'SECOND';


结果:
DAY         HOUR        MINUTE      SECOND
----------- ----------- ----------- -----------
0           1           119         7199

6.DATEPART(datepart,date):返回date中指定的datepart部分.

7.YEAR,MONTH,DAY:返回日期相应的部分

--DATEPART函数
SELECT DATEPART(YEAR,SYSDATETIME()) AS 'YEAR',DATEPART(MONTH,SYSDATETIME()) AS 'MONTH',DATEPART(DAY,SYSDATETIME()) AS 'DAY'
--YEAR,MONTH,DAY 函数
SELECT YEAR(SYSDATETIME()) AS 'YEAR1',MONTH(SYSDATETIME()) AS 'MONTH1',DAY(SYSDATETIME()) AS 'DAY1';

--结果:

YEAR        MONTH       DAY
----------- ----------- -----------
2019        4           28

(1 行受影响)

YEAR1       MONTH1      DAY1
----------- ----------- -----------
2019        4           28

8.ISDATE:判断表达式是否是有效的日期类型。(注意:datetime2类型不能判断)

--datetime2
--IF ISDATE('2007-01-01 12:12:12.1234')=1 --not is date 小数点超过3位即不能判断

--datetime
--IF ISDATE('2007-01-01 12:12:12.123')=1 --IS DATE

--smalldatetime
--IF ISDATE('2007-01-01 12:12:00')=1 --IS DATE

--date
--IF ISDATE('2007-01-01')=1 --IS DATE

--time
--IF ISDATE('12:12:12.123')=1 --IS DATE

--time
IF ISDATE('12:12:12.1234')=1 --NOT IS DATE 小数点超过3位即不能判断
	PRINT N'IS DATE';
ELSE 
	PRINT N'NOT IS DATE';

9.datefromparts,datetimefromparts,datetime2fromparts,timefromparts,smalldatetimefromparts:格式化日期生成函数。

SELECT DATEFROMPARTS(2009,01,01) AS [DATETIME];--结果:2009-01-01
SELECT TIMEFROMPARTS(22,11,11,1234567,7) AS [TIME];--7代表精度为七位,结果:22:11:11.1234567
SELECT DATETIMEFROMPARTS(2009,01,01,22,11,11,123) AS [DATETIMEFROMPARTS];--结果:2009-01-01 22:11:11.123
SELECT DATETIME2FROMPARTS(2009,01,01,22,11,11,0123456,7) AS [DATETIME2FROMPARTS];--2009-01-01 22:11:11.0123456
SELECT SMALLDATETIMEFROMPARTS(2009,01,01,22,11) AS [SMALLDATETIMEFROMPARTS];--结果:2009-01-01 22:11:00,精确到分钟

猜你喜欢

转载自blog.csdn.net/ilovetheworld/article/details/89639723