在深入探讨主题之前,首先需要了解什么是函数,然后研究SQL Server中标量函数的细节。在SQL Server中,函数是一组用于执行特定操作的T-SQL语句。SQL Server提供了多种函数,如分析函数、标量函数、聚合函数等。
当想要对单个值进行操作时,就会使用到SQL Server中的标量函数。SQL Server的标量函数可以接收一个或多个参数作为输入,并总是返回单个值。使用标量函数有助于简化SQL Server中的数据查询。根据它们执行的操作,标量函数可以分为多个类别,如JSON函数、游标函数、日期和时间函数、逻辑函数等。
本文将研究标量函数的一个类别——日期和时间函数。日期和时间函数用于对日期和时间输入值执行操作,并返回字符串、数字或日期和时间值。这些函数用于执行特定类型的操作,例如返回当前日期和时间、修改日期和时间值、返回两个日期之间的差异、验证日期和时间值等。
让讨论SQL Server中可用的日期和时间函数类型——
SQL Server提供了多种日期和时间函数,如SYSUTCDATETIME()、CURRENT_TIMESTAMP、GETDATE()、DAY()、MONTH()、YEAR()、DATEFROMPARTS()、DATETIME2FROMPARTS()、TIMEFROMPARTS()、DATEDIFF()、DATEADD()、ISDATE()等。这些函数用于对日期和时间输入执行操作。
此函数用于返回运行SQL Server实例的计算机上的UTC格式的日期和时间值。该函数返回datetime2(7)值作为结果。
SELECT SYSUTCDATETIME() AS [SYSUTCDATETIME]
此函数用于返回包含运行SQL Server实例的计算机上的日期和时间值的datetime值。该函数返回datetime值作为结果,不包括时区偏移量。
SELECT CURRENT_TIMESTAMP AS [CURRENT_TIMESTAMP]
此函数用于返回包含运行SQL Server实例的计算机上的日期和时间值的datetime值。该函数返回datetime值作为结果,不包括时区偏移量。CURRENT_TIMESTAMP和GETDATE()的区别在于,CURRENT_TIMESTAMP是ANSI SQL函数,而GETDATE()是相同功能的T-SQL版本。
SELECT GETDATE() AS [GETDATE]
此函数用于返回指定日期的“日”部分所代表的整数。DAY函数接受日期作为参数,可以是datetime、date、datetime2、time和小datetime类型。用户可以将列表达式、表达式、字符串字面量或用户定义的变量作为参数传递给DAY函数。
SELECT DAY('2022-09-02') AS [DAY]
SELECT DAY('2022-09-12 01:01:01.2234567') AS [DAY]
此函数用于返回指定日期的“月”部分所代表的整数。MONTH函数接受日期作为参数,可以是datetimeoffset、time、date、datetime、smalldatetime或datetime2类型。用户可以将列表达式、表达式、字符串字面量或用户定义的变量作为参数传递给MONTH函数。
SELECT MONTH('2022-10-02') AS [MONTH]
SELECT MONTH('2022-01-12 01:01:01.2234567') AS [MONTH]
此函数用于返回指定日期的“年”部分所代表的整数。YEAR函数接受日期作为参数,可以是datetimeoffset、time、date、datetime、smalldatetime或datetime2类型。用户可以将列表达式、表达式、字符串字面量或用户定义的变量作为参数传递给YEAR函数。
SELECT YEAR('1998-10-02') AS [YEAR]
SELECT YEAR('2022-01-12 01:01:01.2234567') AS [YEAR]
此函数用于返回指定年、月、日的日期。DATEFROMPARTS函数接受年(指定年份)、月(指定月份)和日(指定日期)作为必需参数。如果提供了无效的年、月或日,则DATEFROMPARTS函数将引发错误。如果至少有一个必需参数的值为null,则DATEFROMPARTS函数将返回null。
SELECT DATEFROMPARTS(2012, 09, 15) AS Result
此函数用于返回指定日期和时间的日期,以及指定的精度。DATETIME2FROMPARTS函数接受年(指定年份)、月(指定月份)、日(指定日期)、小时(指定小时)、分钟(指定分钟)、秒(指定秒)、分数(指定分数秒值)和精度(指定DATETIME2FROMPARTS函数返回的datetime2值的精度)作为必需参数。如果提供了无效的必需参数,则DATETIME2FROMPARTS函数将引发错误。如果至少有一个必需参数的值为null,则DATETIME2FROMPARTS函数将返回null。但是,如果精度参数的值为null,则DATETIME2FROMPARTS函数会引发错误。
SELECT DATETIME2FROMPARTS(2022, 09, 15, 12, 34, 56, 7, 2) AS Result
SELECT DATEDIFF(MONTH, '2010-08-01', '2022-02-28')