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

2009-1-9    | |
打印本文章
RSS

导读:在本文中,作者将解释如何将DATETIME和SMALLDATETIME数据类型转换成字符数据,以及如何将字符数据转换成日期/时间数据。具体来说,本章将介绍Transat-SQL支持……

关键词:SQL Server 日期/时间值 字符型数据

正在加载数据...

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

【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中的显式数据转换。

查看全文
 
我们在SQL Server 2008 B的SSIS服务中,经常会用到变量。SSIS的变量分为两种,一种是系统变量,一种用户定义的变量。系统变量包含有关包、容器……
 
创建可在选定的SQL Server版本上运行的脚本。无法为早期版本编写SQL Server 2005新增功能的脚本。某些为SQL Server 2005创建的脚本无法在运行……
 
在生成脚本过程中,有很多参数可以选择,合理的配置这些参数,可以让我们很方便的按照我们的期望生成脚本。本文着重介绍了如何在SQL Server中生成脚本。
 
在SQL Server 2000的视图中使用*符号时我们应该注意些什么?本文中描述了sp_refreshview的功能:刷新指定视图的元数据。由于视图所依赖的基础对象的更改……
 
有些朋友看到这个标题可能会有疑问,难道在视图中使用*符号还有何要注意的地方吗?对于这个问题,我们先不必回答,先看一下文中的例子吧。
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录