如何将字符串转换为日期T-SQL?

Naz*_*ych 82 t-sql sql-server-2005

如何在T-SQL中将字符串转换为日期?

我的测试用例是字符串: '24.04.2012'

Chr*_*rts 132

CONVERT(datetime, '24.04.2012', 104)
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.有关详细信息,请参阅此处:"CAST和CONVERT(Transact-SQL)"


MAb*_*am1 17

这是一个运作良好的解决方案.基本语句包含内联try-parse:

SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Run Code Online (Sandbox Code Playgroud)

这是我们在生产版本中实现的内容:

UPDATE dbo.StagingInputReview
 SET ReviewedOn = 
     ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
 ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
 -- Check for empty/null/'NULL' text
 WHERE not ReviewedOnText is null 
   AND RTrim(LTrim(ReviewedOnText))<>''
   AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
Run Code Online (Sandbox Code Playgroud)

ModifiedOn和ModifiedBy列仅用于内部数据库跟踪目的.

另请参阅这些Microsoft MSDN参考:


小智 8

虽然CONVERT的功能有用,但实际上你不应该使用它.您应该问问自己为什么要在SQL-Server中解析字符串值.如果这是一次性工作,您手动修复某些数据,则不会再次获取该数据,这是可以的,但如果有任何应用程序使用此数据,您应该更改某些内容.最好的方法是使用"日期"数据类型.如果这是用户输入,则更糟.然后你应该先在客户端做一些检查.如果你真的想传递SQL-Server期望日期的字符串值,你总是可以使用ISO格式('YYYYMMDD')并且它应该自动转换.

  • 你是从某个外部系统导入数据文件的情况怎么样,输入列恰好是这些格式之一,例如"05/31/2013"​​,但它是以字符串形式出现的?而且,您正在编写一个存储过程来导入该数据,或者使用SSIS导入它?然后CONVERT将是适当的使用,不是吗? (4认同)

小智 5

您可以使用:

SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Run Code Online (Sandbox Code Playgroud)

参考: CAST 和 CONVERT (Transact-SQL)

  • 很有趣,有效。格式 103 为 dd/mm/yyyy,104 为 dd.mm.yyyy。 (2认同)