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 到日期时间的主要内容,如果未能解决你的问题,请参考以下文章