如何将字符串解析为日期?

问题描述 投票:82回答:6

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

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

tsql sql-server-2005
6个回答
131
投票
CONVERT(datetime, '24.04.2012', 104)

应该做到这一点。有关更多信息,请参见此处:CAST and CONVERT (Transact-SQL)


25
投票

Microsoft SQL Date Formats

CONVERT(DateTime, DateField, 104)

17
投票

假设数据库是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参考:


8
投票

尽管CONVERT可以正常工作,但实际上您不应使用它。您应该问自己为什么要在SQL Server中解析字符串值。如果这是一项一次性的工作,而您要手动修复一些数据,那么您下次将不会再获得该数据,那是可以的,但是如果任何应用程序正在使用它,则应该进行一些更改。最好的方法是使用“日期”数据类型。如果这是用户输入,那就更糟了。然后,您应该首先在客户端中进行一些检查。如果您确实想在SQL-Server期望日期的地方传递字符串值,则可以始终使用ISO格式('YYYYMMDD'),并且它应该自动转换。


4
投票

您可以使用:

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

参考:CAST and CONVERT (Transact-SQL)


0
投票
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

将执行所需的操作,结果:

2012-04-24 00:00:00.000
© www.soinside.com 2019 - 2024. All rights reserved.