2010-03-24 27 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 
相關問題