我在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。我肯定可能会破解它,但我认为这里的人们可以为我提供一种正确的方法来实现它。
答案 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))