2013-04-05 117 views
0

我试图从文件名捕获日期部分,并试图将其转换为datetime数据类型。在SQL Server 2008日期时间varchar

SELECT CONVERT(Datetime, substring('EmployeeExcel_03312013',15,22), 120) 

获得以下错误:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

任何想法?请建议我是否缺少任何东西?

回答

0

有一个类似的帖子就在这里:Convert varchar into datetime in SQL Server

为了使它更简单:

select convert(datetime, '03312013', 120) --produces error 

这表明CONVERT不知道做什么用的字符串格式化的方式。

如果你把日期分成'03 -31-2013'(这是上面的链接)或类似的东西,你会很好。

4

您可以使用以下方法:

SELECT 
    convert(datetime, 
      right('EmployeeExcel_03312013', 4) 
      +substring('EmployeeExcel_03312013',15,4), 112) 

这将被转换为日期之前获得的格式20130331值。

见​​

1

你可以给这个一去

DECLARE @Date char(8) 
set @Date=substring('EmployeeExcel_03312013',15,22) 
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2)) 

输出:

----------------------- 
2013-03-31 00:00:00.000 

(1 row(s) affected) 

SQLFiddle Example