89

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

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

4

6 回答 6

139
CONVERT(datetime, '24.04.2012', 104)

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

于 2012-04-24T19:15:55.990 回答
26

Microsoft SQL 日期格式

CONVERT(DateTime, DateField, 104)
于 2012-04-24T19:05:12.333 回答
25

假设数据库是 MS SQL Server 2012 或更高版本,这里有一个可行的解决方案。基本语句包含内联 try-parse:

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

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

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';

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

另请参阅这些 Microsoft MSDN 参考:

于 2016-02-10T15:18:21.837 回答
9

尽管 CONVERT 东西有效,但您实际上不应该使用它。您应该问自己为什么要在 SQL-Server 中解析字符串值。如果这是您手动修复某些数据的一次性工作,您将不会再次获得该数据,这没关系,但如果任何应用程序正在使用它,您应该更改一些内容。最好的方法是使用“日期”数据类型。如果这是用户输入,那就更糟了。然后你应该首先在客户端做一些检查。如果你真的想在 SQL-Server 需要日期的地方传递字符串值,你总是可以使用 ISO 格式 ('YYYYMMDD'),它应该会自动转换。

于 2012-09-19T17:18:03.867 回答
5

您可以使用:

SELECT CONVERT(datetime, '24.04.2012', 103) AS Date

参考: CAST 和 CONVERT (Transact-SQL)

于 2012-04-24T19:18:23.680 回答
1
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

将做需要做的事情,结果:

2012-04-24 00:00:00.000
于 2017-10-30T03:28:36.400 回答