datetime Cast或Convert?

时间:2013-07-02 18:49:39

标签: sql sql-server

选择什么:CastConvert表示日期时间(Microsoft SQL Server)?


我看过MSDN Specifications。乍一看似乎没有区别,除了语法:

CAST语法:

CAST ( expression AS data_type [ ( length ) ] )

CONVERT的语法:

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

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

2 个答案:

答案 0 :(得分:8)

convert有一个可选参数style,我建议使用convert代替cast。它有助于避免混淆。 例如,如果你写cast('20130302' as date),你会得到什么? 3月2日或2月3日?

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

答案 1 :(得分:2)

您发布的MSDN Specification链接,如果您仔细阅读,您会在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/