SQL Server中日期/时间值到字符类型的数据转换(一)

日期: 2009-01-08 作者:Robert Sheldon翻译:曾少宁 来源:TechTarget中国 英文

在本文中,我将解释如何将DATETIME和SMALLDATETIME数据类型转换成字符数据,以及如何将字符数据转换成日期/时间数据。具体来说,本章将介绍Transat-SQL支持的两个内置SQL Server数据转换方法——隐式转换和显式转换。在前一篇的技巧《SQL Server 2005的DATETIME和SMALLDATETIME数据基础》中,我已经阐述了SQL Server是如何使用DATETIME和SMALLDATETIME数据类型来存储日期/时间数据的。在本文中,我将解释日期/时间数据是如何转换成字符数据和字符数据是如何转换成日期/时间数据以及Transact-SQL是如何支持这两种……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在本文中,我将解释如何将DATETIME和SMALLDATETIME数据类型转换成字符数据,以及如何将字符数据转换成日期/时间数据。具体来说,本章将介绍Transat-SQL支持的两个内置SQL Server数据转换方法——隐式转换和显式转换。在前一篇的技巧《SQL Server 2005的DATETIME和SMALLDATETIME数据基础》中,我已经阐述了SQL Server是如何使用DATETIME和SMALLDATETIME数据类型来存储日期/时间数据的。在本文中,我将解释日期/时间数据是如何转换成字符数据和字符数据是如何转换成日期/时间数据以及Transact-SQL是如何支持这两种执行这些数据转换的方法——隐式转换和显式转换。


  本文的前提是假定你已具备T-SQL和SQL Server应用知识,并且该部分只涉及日期/时间数据与字符数据之间的相互转换。但是,你还可以转换其它类型的数值,如将INT转换为DATETIME。虽然在大多数情况下,你的主要工作是字符到日期/时间的转换。

隐式转换数据

当你插入数据到DATETIME或SMALLDATETIME字段中时,SQL Server会自动尝试将不同类型的数据进行转换。例如,如果你向DATETIME字段中插入CHAR值,SQL Server将对数据作转换——如果该值是一个可以接受的格式。如果你在CHAR栏中插入DATETIME值,SQL Server也将作自动转换。


  让我们来看看几个隐式转换例子以便更好地理解它是如何工作的。为了说明这些转换,我使用了下面的代码在AdventureWorks示例数据库中创建LogInfo表:


USE AdventureWorks
GO
CREATE TABLE dbo.LogInfo 
(
LogID INT PRIMARY KEY, 
LogEvent NVARCHAR(30) NOT NULL, 
Post_DateTime DATETIME NOT NULL, 
Post_SmallDateTime SMALLDATETIME NOT NULL, 
Post_NVarChar NVARCHAR(25) NOT NULL
)

在这个表中包含了三个用于保存日期/时间信息的字段:Post_DateTime、Post_SmallDateTime和Post_NVarChar。字段的名称反映了用于定义字段的数据类型。下面让我们在这些字段中插入数据:


INSERT INTO LogInfo
SELECT DatabaseLogID, [Event], 
PostTime, PostTime, PostTime
FROM dbo.DatabaseLog

这个语句将从DatabaseLog表(在AdventureWorks数据库)中获取数据,然后插入到LogInfo表中。在源表的PostTime字段是DATETIME数据类型的。注意,这个字段是用于将数据插入到LogInfo表的每个日期/时间字段的。

在你填充好表的数据后,你可以使用下面的SELECT语句来获取LogInfo表的第一行记录:


SELECT * from dbo.LogInfo
WHERE LogID = 1

SELECT语句返回LogID值为1的记录行的所有字段的值。下面的结果显示了数据是如何存储在表中的。

LogID

LogEvent

Post_DateTime

Post_SmallDateTime<?xml:namespace prefix = o /><?xml:namespace prefix = o />

Post_NVarChar

1

CREATE_TABLE

2005-10-14 01:58:27.567

2005-10-14 01:58:00

Oct 14 2005 1:58AM

你可以看到,每个日期/时间值都稍微有些不同。The Post_DateTime字段存储的是完整日期和时间值。但是,正如我们所预期的,Post_SmallDateTime字段存储一个缩短的时间(00表示秒)。最后,Post_NVarChar存储的是一个与其它两个非常不一样的字符串值。

默认情况下,当SQL Server将一个DATETIME或SMALLDATETIME值转换为一个字符值时,它使用上面显示的格式(Oct 14 2005 1:58AM)。在后面的文章中,你将会知道我们还可以将这种格式修改成其它的一些可用的格式。但是目前而言,我们要知道的重要一点是SQL Server是如何隐式转换日期/时间值的。现在让我们来看看SQL Server中的显式数据转换。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐