Transact-SQL包含一组函数可以用于检索当前的日期和时间或一个DATETIME或SMALLDATETIME值的某个部分。比如,你可以在DATETIME值中提取日、月或年以及季度、周、小时甚至毫秒。在本文中,我将对这些函数进行阐述并举例说明如何使用SQL Server中的这些函数来查询数据的。注意,本文假定你已经具备了一定的T-SQL、DATETIME和SMALLDATETIME数据类型的知识。
想获得更多这些类型的信息,你可以阅读这一系列的第一部分“SQL Server 2005的DATETIME和SMALLDATETIME基础”。 检索当前日期和时间 在T-SQL中最便捷的一个函数就是……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
Transact-SQL包含一组函数可以用于检索当前的日期和时间或一个DATETIME或SMALLDATETIME值的某个部分。比如,你可以在DATETIME值中提取日、月或年以及季度、周、小时甚至毫秒。在本文中,我将对这些函数进行阐述并举例说明如何使用SQL Server中的这些函数来查询数据的。注意,本文假定你已经具备了一定的T-SQL、DATETIME和SMALLDATETIME数据类型的知识。想获得更多这些类型的信息,你可以阅读这一系列的第一部分“SQL Server 2005的DATETIME和SMALLDATETIME基础”。
检索当前日期和时间
在T-SQL中最便捷的一个函数就是GETDATE,它根据本地系统的时钟设置检索当前日期和时间。使用GETDATE,只需直接调用T-SQL语句中的函数而不用指定任何参数,如下例所示:
SELECT GETDATE() AS [Current Date/Time] |
在这里,我在SELECT中使用GETDATE来检索日期/时间值。(注意,即使你不需要任何参数,你必须使用括号。)语句返回的结果如下:
Current Date/Time |
2008-07-29 10:45:13.327 |
默认情况下,GETDATE函数返回如下格式的时间值。然而,你可以使用CONVERT函数修改结果的格式。关于CONVERT的使用,可以参考这一技巧系列“从date/time值到字符类型的数据转换”。
Transact-SQL的另外一个简单的函数是GETUTCDATE,它用于检索当前的Coordinated Universal Time (UTC)——也就是格林威治标准时间。检索的值是基于本地系统上的时钟和时区设置的。正如你在GETDATE中所看到的,你在Transact-SQL语句中调用GETUTCDATE是不需要包括任何参数的,如下例所示:
|
你运行这个语句时,你会得到如下的结果:
UTC Date/Time |
2008-07-29 17:45:13.327 |
注意,这里返回的时间比前面显示的例子要晚7个小时。但我在一个配置为太平洋时区(在夏时制的白天)的系统上同时运行这些语句。
正如你在最后两个例子中所看到的,这些函数都是包含在SELECT列表中的。但是,当用它们来定义你定义表的默认值时,这些函数是特别有用的。比如,下面的三个语句所创建的Orders表格——包括一个DATETIME字段(OrderDate)——在表格中插入数据并检索该数据:
CREATE TABLE Orders ( OrderID INT PRIMARY KEY IDENTITY, Product VARCHAR(30) NOT NULL, OrderAmt INT NOT NULL, OrderDate DATETIME NOT NULL DEFAULT GETDATE() ) GO INSERT INTO Orders (Product, OrderAmt) VALUES('Test Product', 12) GO SELECT * FROM Orders |
OrderDate字段定义包含一个指定GETDATE作为默认值的DEFAULT子句。因此,当你在表格中插入行时,当前日期和时间将自动插入列中,下面显示了SELECT语句返回的结果:
OrderID | Product | OrderAmt | OrderDate |
1 | Test Product | 12 | 2008-07-29 10:46:47.420 |
你可以将这些信息作为一个时间戳来使用,以便在需要时跟踪加入的记录或协助数据审计。这也方便其它使用时间戳检索数据的操作。比如,当决定是否提取或更新数据时,抽取、转换和加载(ETL)程序可能参考时间戳。
检索年、月或日
在某些情况下,你可能想要在DATETIME或SMALLDATETIME值中检索年、月或日。其中一个函数是使用YEAR、MONTH或DAY函数来检索必要的数据(作为一个整数)。下面的SELECT语句就是一个很好的说明:
SELECT YEAR(PostTime) AS [Year], MONTH(PostTime) AS [Month], DAY(PostTime) AS [Day] FROM DatabaseLog WHERE DatabaseLogID = 1 |
SELECT子句中包含了三个字段表达式。第一个使用的是YEAR函数来检索DatabaseLog表格(AdventureWorks中的样本数据库)中的PostTime字段的年。当调用YEAR函数时,指定字段的名称(或其它表达式)作为函数的参数。MONTH和DAY函数也是一样的运行方式。在SELECT子句中的第二个字段表达式使用DAY来检索日。下面的结果显示了语句返回的信息类型:
每一个值都是在PostTime字段中提取并作为一个整数返回的。(存储在表中的值是2005-10-14 01:58:27.567。)
这些函数都是检索年、月或日的简单方式,但是,在某些情况下,你可能想更多的控制返回的值的类型以及这些值的格式。另外,你可能想从日期/时间值中提取时间。幸运的是,Transact-SQL支持这些函数。
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。
-
如何在Azure部署时选择合适的SQL Server?
想要在Azure上运行SQL Server,企业一般会面临两种选择:在Azure虚拟机上安装SQL Server或使用Azure SQL Database。
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。