2010-03-24 64 views

回答

3

如何像:

SET DATEFORMAT MDY 
GO 
Select StringValue, Cast(Stuff(StringValue, 3, 0, '-01-') As datetime) 
From Table... 

在我的本地机器上有一百万行,那在10秒内返回。

+1

+1:正确,很好地使用STUFF(支持SQL Server 2005+)命令:http://msdn.microsoft.com/en-us/library/ms188043%28SQL.90%29.aspx – 2010-03-25 05:02:29

+0

Stuff在SQL Server 2000也是如此。 – 2010-09-20 12:30:05

0

看一看这里:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

的STR_TO_DATE功能不只是这听起来像它会做的事:它接受一个字符串,并把它变成一个标准的日期对象。要将其转换为MM/DD/YYY格式,请使用DATE_FORMAT。这是做到这一点的最简单的方法,并且可能是最有效的。

对于你的榜样,你可以将其转换像这样:

SELECT DATE_FORMAT(STR_TO_DATE('022008', '%m%Y'), '%m/%d/%Y'); 
-> 02/00/2008 

你必须做一些额外的废话来获得一天改为“01”,那么也许你可以打扫一下你一次得到结果;否则,查询变得更加复杂。

希望这会有所帮助。它
-tjw

+0

但似乎我们正在寻找MS Transact-SQL。 “高效”这个词使得这个问题变得困难...... – LesterDove 2010-03-24 22:29:07

+0

+1干净简单,你只是忘了另一个0 :) – medopal 2010-03-24 22:30:38

+0

这对MySQL而不是SQL Server有效。 – 2010-03-25 05:04:09

0

未产生大的效率,但我的第一个刺:

declare @s as char(6) 
set @s = '031977' 

select dateadd(month, cast(substring(@s, 1, 2) as int) - 1, dateadd(year, substring(@s, 3, 4) - 1900, 0)) 

输出:

1977-03-01 00:00:00.000 
相关问题