如何将mmm d yyyy HH:MM [AM]转换为SQL中的日期时间?

时间:2012-01-16 19:25:41

标签: sql sql-server datetime

我对datetime和SQL Server感到困惑。

我有(例子)Aug 4 2011 12:00AM

如何将其转换为datetime(或smalldatetime)类型。

convert(datetime, 'Aug  4 2011 12:00AM') 

编辑:它有效

感谢。

3 个答案:

答案 0 :(得分:5)

这个 在SQL Server 2008上为我工作。

select convert(datetime, 'Aug  4 2011 12:00AM') as ConvertResult

ConvertResult
-------------
2011-08-04 00:00:00.000

正在发生的是隐式转换,但并不总是值得信赖。日期格式的格式说明符为100,可在CAST and CONVERT docs的表格中找到。试试这个:

select convert(datetime, 'Aug  4 2011 12:00AM', 100) as ConvertResult

ConvertResult
-------------
2011-08-04 00:00:00.000

答案 1 :(得分:1)

你试过这种方式吗?

convert(datetime, 'Aug  4 2011 12:00AM', 120)

120用于样式格式化。

查看此链接以获取完整文档 http://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 2 :(得分:1)

你可以稍微“按摩”一下数据:(警告:没有经过测试,但这些内容应该有效)。作为一个注释,如果没有其他方法可行,这是一种强力方法。

declare @datestring varchar(30);
set @datestring = 'Aug  4 2011 12:04AM';

select convert(datetime, 
    substring(@datestring, 8,4) + '-' +
    case lower(left(@datestring, 3))
        when 'jan' then '01'
        when 'feb' then '02'
        when 'mar' then '03'
        when 'apr' then '04'
        when 'may' then '05'
        when 'jun' then '06'
        when 'jul' then '07'
        when 'aug' then '08'
        when 'sep' then '09'
        when 'oct' then '10'
        when 'nov' then '11'
        when 'dec' then '12'
    end + '-' +
    right('00' + ltrim(rtrim(substring(@datestring, 5, 2))), 2) + ' ' +
    substring(@datestring, 13,50)
) as Converted;