【IT168 技术文档】在本文中,我将解释如何将DATETIME和SMALLDATETIME数据类型转换成字符数据,以及如何将字符数据转换成日期/时间数据。具体来说,本章将介绍Transat-SQL支持的两个内置SQL Server数据转换方法——隐式转换和显式转换。我将解释日期/时间数据是如何转换成字符数据和字符数据是如何转换成日期/时间数据以及Transact-SQL是如何支持这两种执行这些数据转换的方法——隐式转换和显式转换。
本文的前提是假定你已具备T-SQL和SQL Server应用知识,并且该部分只涉及日期/时间数据与字符数据之间的相互转换。但是,你还可以转换其它类型的数值,如将INT转换为DATETIME。虽然在大多数情况下,你的主要工作是字符到日期/时间的转换。
隐式转换数据
当你插入数据到DATETIME或SMALLDATETIME字段中时,SQL Server会自动尝试将不同类型的数据进行转换。例如,如果你向DATETIME字段中插入CHAR值,SQL Server将对数据作转换——如果该值是一个可以接受的格式。如果你在CHAR栏中插入DATETIME值,SQL Server也将作自动转换。
让我们来看看几个隐式转换例子以便更好地理解它是如何工作的。为了说明这些转换,我使用了下面的代码在AdventureWorks示例数据库中创建LogInfo表:
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。字段的名称反映了用于定义字段的数据类型。下面让我们在这些字段中插入数据:
SELECT DatabaseLogID, [Event],
PostTime, PostTime, PostTime
FROM dbo.DatabaseLog
这个语句将从DatabaseLog表(在AdventureWorks数据库)中获取数据,然后插入到LogInfo表中。在源表的PostTime字段是DATETIME数据类型的。注意,这个字段是用于将数据插入到LogInfo表的每个日期/时间字段的。