显式地转换日期/时间值,你必须使用CAST或CONVERT Transact-SQL方法。由于CAST方法是两者中相对简单的,因此我们从这个开始介绍。下面这个SELECT语句使用CAST方法将Post_NVarChar字段中的字符数据转换成一个DATETIME值。
SELECT LogID, LogEvent,
CAST(Post_NVarChar AS DATETIME) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1
CAST(Post_NVarChar AS DATETIME) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1
当你使用CAST方法时,你必须指定源字段名称(或其它一些表达式)、AS关键字和值转换的数据类型——这里是DATETIME。当你运行这个语句时,值就被转换了,如下面显示的结果:
LogID
LogEvent
Post_Converted<?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o />
1
CREATE_TABLE
2005-10-14 01:58:00.000
(1 row(s) affected)
LogEvent
Post_Converted<?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o />
1
CREATE_TABLE
2005-10-14 01:58:00.000
(1 row(s) affected)
注意,Post_Converted字段(别名赋给SELECT子句中的字段)预期是包括完整日期时间值并精确到毫秒的DATETIME格式。但是,秒是表示为00.000。这是因为当SQL Server转换原始值时,它会去掉秒而只存储小时和分钟值。当你将值转换回DATETIME时,SQL Server 将秒设置为00.000。
然而,如果日期/时间值是以作为字符串存储的并使用DATETIME数据所使用的格式,那么SQL Server就会保留秒。比如,下面的SELECT语句使用CAST方法将字符串值转换为DATETIME:
SELECT CAST('2005-10-14 01:58:27.567' AS DATETIME) AS [Date/Time]
下面的结果显示秒和毫秒现在被保存了:
Date/Time
2005-10-14 01:58:27.567
(1 row(s) affected)
2005-10-14 01:58:27.567
(1 row(s) affected)
除了显式地将DATETIME(或SMALLDATETIME)值转换成字符数据,你也可以使用CAST方法将DATETIME数据转换成字符数据。下面的SELECT语句使用CAST功能从Post_DateTime字段中获取数据:
SELECT LogID, LogEvent,
CAST(Post_DateTime AS VARCHAR(20)) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1
CAST(Post_DateTime AS VARCHAR(20)) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1