日期时间投射或转换? [复制]

Posted

技术标签:

【中文标题】日期时间投射或转换? [复制]【英文标题】:datetime Cast or Convert? [duplicate] 【发布时间】:2013-07-02 18:49:39 【问题描述】:

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


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

CAST 的语法:

CAST ( expression AS data_type [ ( length ) ] )

CONVERT 的语法:

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

CAST 是 ANSI 标准,这使得它在不同的数据库平台上更便携。

【问题讨论】:

@Learner 我问过有关日期时间转换/转换的问题,但不是一般情况。因为'Convert'转换成格式日期更灵活。 @F***Bigler 部分问题是这是基于意见的,当我使用 cast 或 convert 时可能与其他人使用它时不同。 @bluefeet 我不要求主观答案。我要求务实的思考。 您提出问题的方式是主观的,尽管您何时选择 Cast 而不是 Convert 针对datetime 专门提出这个问题有什么意义?链接问题的公认答案涵盖了您需要知道的所有内容:CAST 是 ANSI,CONVERT 更灵活。当 ANSI 合规性是优先事项时,请使用 CAST。当您需要灵活性时,请使用 CONVERT。 【参考方案1】:

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

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

【讨论】:

+1 是很好的例子 'cast('20130302' as date)' 如果你投 cast('20130302' as date),我希望你得到 2013-03-02,所以 2013 年 3 月 2 日。总是。 实际上,您选择了一个不好的例子来说明您的情况。 YYYYMMDD 格式将总是在 SQL Server 中被明确解释,因此'20130302' 将转换为 2013 年 3 月 2 日,而没有格式说明符。 @AndriyM 是的,你说得对,我只是想指出 YYYYMMDD 是 SQL Server 中的 ISO 格式,但你更快。无论如何,我认为我关于日期/日期时间的castconvert 的观点已经足够清楚了。如果以后必须举个例子,我会尝试使用 yyyy-mm-dd :) 是的,或者类似07/05/12【参考方案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/

【讨论】:

谢谢。正如您在 MSDN 规范中提到的,我已经看到了 cast 和 convert 之间的区别。但这并不能回答我何时使用哪个问题。在哪些情况下使用 cast 或 convert 是否没有经验法则? 据我了解,没有经验法则。我更喜欢使用 Convert,因为它使日期格式化变得超级简单。

以上是关于日期时间投射或转换? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将时间戳转换为日期

如何将日期类转换为正确解析日期时间? [复制]

如何在python中将字符串日期转换为日期时间格式? [复制]

如何将 JavaScript 日期转换为 MySQL 日期时间格式? [复制]

如何将mysql日期时间转换为客户端日期时间? [复制]

MySQL中日期和时间戳互相转换的函数和方法