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

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

导读:显式地转换日期/时间值,你必须使用CAST或CONVERT Transact-SQL方法。由于CAST方法是两者中相对简单的,因此我们从这个开始介绍。下面这个SELECT语句使用CAST方法……

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

正在加载数据... 【TechTarget中国原创】显式地转换日期/时间值,你必须使用CAST或CONVERT Transact-SQL方法。由于CAST方法是两者中相对简单的,因此我们从这个开始介绍。下面这个SELECT语句使用CAST方法将Post_NVarChar字段中的字符数据转换成一个DATETIME值。

【TechTarget中国原创】显式转换数据

  显式地转换日期/时间值,你必须使用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方法时,你必须指定源字段名称(或其它一些表达式)、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)

  注意,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)

  除了显式地将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

  正如你所看到的下面显示的结果,句法将值转换成VARCHAR:

LogID

LogEvent

Post_Converted

1

CREATE_TABLE

Oct 14 2005 1:58AM

(1 row(s) affected)

  注意,当SQL Server隐式地将DATETIMER值转换成NVARCHA时,转换的值的格式现在就是你先前看到格式。

  现在你了解了如何使用CAST方法,那么让我们接着看看CONVERT方法。最基本的,CONVERT方法返回与CAST方法一样的结果。比如,与上面的例子一样,下面的语句将Post_DateTime值转换成VARCHAR:


SELECT LogID, LogEvent, 
CONVERT(VARCHAR(20), Post_DateTime) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1

  然而,注意在CONVERT方法中的参数的顺序与CAST方法的是不一样的。当使用CONVERT时,你首先指定目标数据类型(VARCHAR),然后是源字段(Post_DateTime)的名称,它是由逗号分隔的两个参数,而不是AS关键字。当你运行语句时,你会得到下面的结果:

LogID

LogEvent

Post_Converted

1

CREATE_TABLE

Oct 14 2005 1:58AM

(1 row(s) affected)

  结果跟前面的例子是一样的。但是,如果你想要以一定的格式显示你的日期/时间值,而不是使用目前我们所看到的格式(Oct 14 2005 1:58AM)。这时,你可以在CONVERT方法中添加第三个参数来指定新的格式,如下面的例子所显示的:


SELECT LogID, LogEvent, 
CONVERT(VARCHAR(20), Post_DateTime, 101) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1

  注意,101已经作为第三个参数添加到方法中。当指定一个格式时,你必须使用由T-SQL支持的预定义代码来表示你想要使用的格式。在这种情况下,101返回如下所显示格式的结果:

LogID

LogEvent

Post_Converted

1

CREATE_TABLE

10/14/2005

(1 row(s) affected)

  Post_Converted值现在的格式是10/14/2005,这个也是代码101代表的格式。如果你想要你的结果显示为类似于DATETIME值所显示的格式,那么你可以指定代码121,如下面的例子:


SELECT LogID, LogEvent, 
CONVERT(VARCHAR(25), Post_DateTime, 121) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1

  现在返回的结果是完整日期和时间值,精确到毫秒:

LogID

LogEvent

Post_Converted

1

CREATE_TABLE

2005-10-14 01:58:27.567

(1 row(s) affected)

  T-SQL支持多种预定义的格式。关于用于调用每个格式的格式命名和代码的完整清单,你可以在Microsoft SQL Server Books Online中阅读CAST和CONVERT(Transact-SQL)专题。

  现在让我们来看一个不同的例子。在下面的SELECT语句中,我们使用了CONVERT方法将Post_SmallDateTime字段栏转换成一个VARCHAR字段:

SELECT LogID, LogEvent, 
CONVERT(VARCHAR(25), Post_SmallDateTime, 121) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1

  正如前面的例子,日期/时间值显示为121格式:

LogID

LogEvent

Post_Converted

1

CREATE_TABLE

2005-10-14 01:58:00.000

(1 row(s) affected)

  注意,由于日期/时间值是从SMALLADATETIME字段中获取的,因此时间值中的秒是00.000,这与SMALLDATETIME的是一样的。以下是如何以指定更短的长度截断VARCHAR数据类型的秒:


SELECT LogID, LogEvent, 
CONVERT(VARCHAR(16), Post_SmallDateTime, 121) AS Post_Converted
FROM dbo.LogInfo
WHERE LogID = 1

  目前CONVERT功能的数据类型参数显示为VARCHAR(16)而非VARCHAR(25),与前面的例子一样。下面的结果显示值是如何被截断以便秒不再显示:


 

LogID

LogEvent

Post_Converted

1

CREATE_TABLE

2005-10-14 01:58

(1 row(s) affected)

  这就是所有关于日期/时间值的显式转换方法。当获取这些值时,CAST和CONVERT方法都是方便的工具(注意,这些方法同样可以用于转换其它类型的值)。在接下来的文章中,我将阐述如何从日期/时间字段获取特定的信息,以及如何计算日期/时间值。同时,你现在也已经掌握了如何转换这些值以及以特定格式显示它们的基本用法,这对你是非常有用的。

Robert Sheldon是一位技术顾问同时还是一位作家。他所撰写的大量书籍、文章和培训材料都与Microsoft Windows以及各种数据库管理系统和业务智能设计和应用相关。他的书包括《Beginning MySQL》(Wrox Programmer-to-Programmer系列的一部分)、《SQL: A Beginner's Guide(based on the SQL:1999 standard)》、《MCSE Training Kit: Designing Highly Available Web Solutions with Microsoft Windows 2000 Server Technologies》和《MCSE Training Kit: Microsoft SQL Server 2000 Database Design and Implementation》。

查看全文
 
我们在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
密码
下次自动登录