Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 如何将字符串解析为日期?_Tsql_Sql Server 2005 - Fatal编程技术网

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

Tsql 如何将字符串解析为日期?,tsql,sql-server-2005,Tsql,Sql Server 2005,如何在T-SQL中将字符串转换为日期 我的测试用例是字符串:'24.04.2012' 我们应该做到这一点。有关更多信息,请参见此处:您可以使用: SELECT CONVERT(datetime, '24.04.2012', 103) AS Date 参考: 尽管CONVERT这个东西可以工作,但实际上不应该使用它。您应该问问自己,为什么要在SQL Server中解析字符串值。如果这是一项一次性工作,您正在手动修复某些数据,下次将无法获得这些数据,这是可以的,但如果任何应用程序正在使用此功能,您

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

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

我们应该做到这一点。有关更多信息,请参见此处:

您可以使用:

SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
参考:

尽管CONVERT这个东西可以工作,但实际上不应该使用它。您应该问问自己,为什么要在SQL Server中解析字符串值。如果这是一项一次性工作,您正在手动修复某些数据,下次将无法获得这些数据,这是可以的,但如果任何应用程序正在使用此功能,您应该更改某些内容。最好的方法是使用“日期”数据类型。如果这是用户输入,则情况更糟。然后,您应该首先在客户端执行一些检查。如果您确实希望在SQL Server需要日期的位置传递字符串值,则始终可以使用ISO格式(“YYYYMMDD”),并且它应该自动转换。

假设数据库是MS SQL Server 2012或更高版本,下面是一个可行的解决方案。basic语句包含行内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';
更新dbo.staginInputReview
设置ReviewedOn=
ISNULL(使用'en-US'),getdate(),尝试将(RTrim(LTrim(reviewdontext))解析为日期时间,
ModifiedOn=(getdate()),ModifiedBy=(suser\u sname())
--检查是否存在空/null/'null'文本
其中not ReviewedOnText为空
和RTrim(LTrim(ReviewedOnText))“
并替换(RTrim(LTrim(ReviewedOnText)),'',''空';
ModifiedOn和ModifiedBy列仅用于内部数据库跟踪目的

另请参见以下Microsoft MSDN参考:

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

2012-04-24 00:00:00.000

如果您正在从某个外部系统导入数据文件,而输入列恰好是这些格式中的一种,例如“05/31/2013”,但它是以字符串形式输入的,那么情况会怎样?比如说,您正在编写一个存储过程来导入数据,或者使用SSI来导入数据?那么CONVERT将是合适的使用方法,不是吗?不一定,在MS SQL Server承载分析数据模型而不是事务数据模型的情况下,使用CONVERT是完全可以的,因为它必须处理大量外部源,而这些外部源不容易作为日期类型传入(正如大卫·巴罗斯(David Barrows)在上文中提到的那样)。日期的默认字符串文字格式为。这假设OP使用Sql Server 2012+,这很有趣。格式103为dd/mm/yyyy,104为dd.mm.yyyy。这似乎不适用于OP发布的内容,即使是不同的语言设置。请尝试。如果它确实适用于您,请发布您当前的语言是的。谢谢。下面是尝试的代码…选择CONVERT(DateTime,'24.04.2012',121)作为ExpireDate
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';
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
2012-04-24 00:00:00.000