将月份和年份字符串转换为日期的有效方法是什么?

时间:2010-03-24 22:15:27

标签: sql sql-server sql-server-2005 tsql

我的列 varchar ,如“022008”,我需要将其转换为日期时间,如“02/01/2008”。这将在转换过程的数百万条记录上运行。这样做的有效选择声明是什么?

3 个答案:

答案 0 :(得分:3)

如下:

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

我本地计算机上的一百万行,在10秒内返回。

答案 1 :(得分: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

答案 2 :(得分: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