显式转换数据 显式地转换日期/时间值,你必须使用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 =&nb……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
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》。
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。
-
如何在Azure部署时选择合适的SQL Server?
想要在Azure上运行SQL Server,企业一般会面临两种选择:在Azure虚拟机上安装SQL Server或使用Azure SQL Database。
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。