sqlserver中datename_正确使用SQL Server的datetime函数:GETDATE、DATENAME和DATEPART(一)...

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是不需要包括任何参数的,如下例所示:

SELECT GETUTCDATE() AS [UTC Date/Time]

你运行这个语句时,你会得到如下的结果:

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语句返回的结果:

OrderIDProductOrderAmtOrderDate

1Test Product122008-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支持这些函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值