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

 
   | |

导读:显式地转换日期/时间值,你必须使用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数据库设计与建模

 
如果把商业现货(COTS)数据建模工具与定制的数据建模应用相比,会发现它们在数据建模方面有很大的差别。
 
使用SQL Server Analysis Services MDX语句,可以很容易地实现像这种具有父子维关系类型的层次结构。
 
SQL Server 2005 中的父子维,解决了如何处理在一个表当中一些记录与本表中其它记录相关联的这样一个常见业务问题。
 
一个范围标记了刻度的一个特定区域,它有助于突出特定的值。例如,在一个间隔为1到10的刻度中,我们可能会考虑添加一个从8到10的范围来突出这些目标数值。
 
现在,双子星项目已经更名为Microsoft PowerPivot,DBA及开发人员可以将目光再转向另外一个SQL Server 2008 R2的功能:Project Madison。
 

登录TechTarget中国

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