日期时间转换:使用Cast还是Convert?

4

选择什么:在Microsoft SQL Server中,CastConvert用于日期时间?


我查看了MSDN规范。乍一看似乎没有区别,除了语法不同:

CAST的语法:

CAST ( expression AS data_type [ ( length ) ] )

CONVERT语法:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

CAST是符合ANSI标准的,这使得它在不同的数据库平台上更易移植。


@Learner 我问的是关于日期时间转换,而不是一般性的问题。因为“Convert”更灵活,可以转换为格式化日期。 - Fabian Bigler
@FabianBigler 问题的一部分在于这是基于个人观点的,当我使用 cast 或 convert 时,可能与其他人使用它的方式不同。 - Taryn
你提出的问题是主观的,不过“何时选择 Cast 而不是 Convert”这个问题。 - Taryn
3
这与 datetime 有何特别关联的意义呢?与此相关的问题的被接受回答已经覆盖了你需要知道的所有内容:CAST 是 ANSI 标准,CONVERT 更加灵活。当需要符合 ANSI 标准时,使用 CAST;当需要灵活性时,使用 CONVERT。 - Andriy M
@AndriyM 我并没有得出两件事情适用相同规则的结论。我可以想象选择其中一种方式的原因可能有其他差异。现在我的疑虑已经消除了 - 谢谢。 - Fabian Bigler
显示剩余2条评论
2个回答

9

convert有一个可选参数style,我建议使用convert而不是cast。这有助于避免混淆。 例如,如果您编写cast('20130302' as date),您会得到什么?三月二还是二月三?

此外,如果要将日期转换为字符串并指定特定格式,则必须使用convert


+1 给出一个好的例子:'cast('20130302' as date)' - Fabian Bigler
6
如果您执行cast('20130302' as date),我期望您得到的结果是2013-03-02,也就是2013年3月2日。始终如此。 - ypercubeᵀᴹ
7
实际上,你选择了一个不好的例子来证明你的观点。在SQL Server中,“YYYYMMDD”格式始终可以被明确地解释,因此“‘20130302’”会被转换为2013年3月2日而不需要指定格式。 - Andriy M
1
@AndriyM 是的,你说得对,我只是想指出YYYYMMDD是SQL Server中的ISO格式,但你更快。无论如何,我认为我的关于日期/时间的castconvert的观点已经足够清楚了。如果将来需要举例说明,我会尝试使用yyyy-mm-dd :) - Roman Pekar
2
是的,或者类似于“07/05/12”的内容。 - ypercubeᵀᴹ
@RomanPekar 这很容易,你总会得到3月2日。YYYYDDMM不是标准格式,而YYYYMMDD才是! - kiradotee

2
您发布的链接是来自MSDN规范,如果您仔细阅读,您会在G部分找到答案。
G. Using CAST and CONVERT with datetime data

以下示例显示当前日期和时间,使用CAST将当前日期和时间更改为字符数据类型,然后使用CONVERT以ISO 8901格式显示日期和时间。

SELECT 
   GETDATE() AS UnconvertedDateTime,
   CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;
GO

这是结果集。

UnconvertedDateTime       UsingCast                       UsingConvertTo_ISO8601

----------------------- ------------------------------ ------------------------------

2006-04-18 09:58:04.570   Apr 18 2006 9:58AM              2006-04-18T09:58:04.570

(1行受影响)

你可以清楚地看到区别。

更新

请查看: http://blog.sqlauthority.com/2012/11/21/sql-server-display-datetime-in-specific-format-sql-in-sixty-seconds-033-video/


谢谢。我已经在MSDN规范中看到了您提到的cast和convert之间的区别。但这并没有回答我的问题,即何时使用哪个。 在什么情况下使用cast或convert没有什么经验法则吗? - Fabian Bigler
据我所知,没有铁律。我更喜欢使用Convert,因为它使日期格式化变得非常容易。 - Learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接