日期时间投射或转换? [复制]
Posted
技术标签:
【中文标题】日期时间投射或转换? [复制]【英文标题】:datetime Cast or Convert? [duplicate] 【发布时间】:2013-07-02 18:49:39 【问题描述】:选择什么:Cast
或 Convert
用于日期时间(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 格式,但你更快。无论如何,我认为我关于日期/日期时间的cast
和convert
的观点已经足够清楚了。如果以后必须举个例子,我会尝试使用 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中将字符串日期转换为日期时间格式? [复制]