如何将不同的字符串转换为日期时间

时间:2011-10-04 15:09:15

标签: sql-server tsql sql-server-2008 datetime

我在SQL Server 2008中有一个表,它将日期/时间值存储为varchar(max)(不要问)。我的任务是将这些值从PST转换为GMT。这些值在每行中有两种格式之一:

2009年3月12日下午4:00

OR

3/12/2009 4:00:00 PM

我如何使用T-SQL确定日期所处的格式(我想也许可以查看它是以字符还是数值开头)然后将其转换为SQL日期时间变量以便我可以使用DATEADD来增加它的小时数吗?

我已经编写了T-SQL来创建游标并循环遍历行,我只是不确定如何检测它所在的格式然后转换为DATETIME。我肯定可能会破解它,但我认为这里的人们可以为我提供一种正确的方法来实现它。

2 个答案:

答案 0 :(得分:2)

您可以使用适用于这两种方案的convert功能

 SELECT convert(datetime, '3/12/2009 4:00:00PM') -- 2009-03-12 16:00:00.000

 SELECT convert(datetime, 'Mar 12 2009 4:00PM')  -- 2009-03-12 16:00:00.000

然后您可以根据需要对其进行格式化

答案 1 :(得分:0)

这对我来说很好,不需要循环或游标:

DECLARE @Date varchar(MAX)

SET @Date = 'Mar 12 2009 4:00PM'

SELECT DATEADD(hh,8,CONVERT(DATETIME,@date))

SET @Date ='3/12/2009 4:00:00PM'

SELECT DATEADD(hh,8,CONVERT(DATETIME,@date))