0

我正在尝试从文件名中捕获 datepart 并尝试将其转换为 datetime 数据类型。

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

出现以下错误:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

有任何想法吗?请建议我是否遗漏了什么?

4

3 回答 3

4

您可以使用以下内容:

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

20130331这将在转换为日期之前以格式获取值。

请参阅带有演示的 SQL Fiddle

于 2013-04-05T15:31:24.317 回答
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 示例

于 2013-04-05T15:32:28.007 回答
0

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

为了使它更简单:

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

这表明 CONVERT 不知道如何处理以这种方式格式化的字符串。

如果您将日期拆分为看起来更像“03-31-2013”​​(这是上面的链接所指示的)或类似的东西,那么您会很好。

于 2013-04-05T15:29:14.980 回答