2011-05-20 119 views

回答

1
Set DateFormat DMY 
GO 
Select Cast(Stuff(Stuff(SomeValue, 3, 0, '-'), 6, 0, '-') As datetime) 
From MyData 
+0

使用此解决方案,我应该总是在执行之前将dateformat设置为DMY? – jrara 2011-05-20 18:40:54

+0

@jara - 是的,因为它可以确保Cast解释月和日期正确地独立于服务器上的默认日期格式 – Thomas 2011-05-20 18:42:14

+0

@jara - 如果没有DateFormat,例如在美国的机器/服务器上,它会想将日期解释为MM-DD-YY而不是DD-MM-YY 。 – Thomas 2011-05-20 18:43:11

1

因为这种格式是非标准,使用

DECLARE @field char(6) 
SET @field = '231280' 
select convert(datetime, right(@field, 2) + substring(@field, 3, 2) + left(@field, 2) , 12) 
+0

代码内置字符串顺序错误造成的误差,但基本的想法是正确的。我修复了代码并进行了测试,以确保它能够正常工作。 – JohnFx 2011-05-20 18:35:28

+0

@JohnFx我在发布它5秒后编辑它。我将我的编辑命名为“Doh”。然后,9分钟后,你做了同样的:( – GSerg 2011-05-20 18:41:17

1

使用的串获得的年,月,日,如果每年大于11加19,如果不加20,得到一年2009格式,但是这是你的查询,而不是只是字符串添加您的列名

select CAST(
      CASE WHEN CAST(SUBSTRING('231280', 5, 2) AS INT) >11 
        THEN '19'+SUBSTRING('231280', 5, 2) 
        else '20'+SUBSTRING('231280', 5, 2) 
       END 
     +'-'+SUBSTRING('231280', 3, 2)+'-'+SUBSTRING('231280', 1, 2) as datetime) 
1

你不得不使用一些子步法将字符串转换为已知date format。下面是一个例子转换字符串格式化3,“英/法”:

declare @YourTable table (YourColumn varchar(50)) 
insert @YourTable 
      select '231280' 
union all select '121280' 
union all select '131185' 

select convert(datetime, substring(YourColumn,1,2) + '/' + 
    substring(YourColumn,3,2) + '/' + substring(YourColumn,5,2), 3) 
from @YourTable 
+0

感谢您提供了一个很好的例子! – jrara 2011-05-20 18:44:29