SQL Server 2008 中的 Varchar 到日期时间

Posted

技术标签:

【中文标题】SQL Server 2008 中的 Varchar 到日期时间【英文标题】:Varchar to datetime in SQL Server 2008 【发布时间】:2013-04-05 15:24:56 【问题描述】:

我正在尝试从文件名中捕获日期部分并尝试将其转换为日期时间数据类型。

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

出现以下错误:

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

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

【问题讨论】:

【参考方案1】:

您可以使用以下内容:

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

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

见SQL Fiddle with Demo

【讨论】:

【参考方案2】:

你可以试试这个

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

【讨论】:

【参考方案3】:

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

为了更简单:

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

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

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

【讨论】:

以上是关于SQL Server 2008 中的 Varchar 到日期时间的主要内容,如果未能解决你的问题,请参考以下文章

sql server 获取指定格式的当前日期

如何查看sql server 2008的SQL语句执行错误日志

SQL Server 数据库的使用技巧

在sql server2008中的日期类型是啥

SQL Server 2008 中的截断/清除表变量

SQL Server 2008 中的领导