CAST nvarchar到DATETIME

时间:2013-12-05 16:33:15

标签: sql sql-server datetime

我最近从SDF将一些空间数据导入SQL 2008。在导入过程中,DateTime字段作为nvarchar导入(254)。有关如何导入数据的示例如下:'20130515103000'

在设置我的视图时,我使用了SELECT CAST(survey_date AS DATETIME) AS Expr1并出现以下错误:

  

从字符串转换日期和/或时间时转换失败。

据我所知,在转换或转换数据之前,我可能需要重新格式化我的数据以符合ISO-8601格式。我不知道该怎么做。

3 个答案:

答案 0 :(得分:3)

看起来您需要一些字符串操作,因为您的日期字符串不是可识别的格式。

可能有一种更简单的方法,但这适用于SQL Server:

DECLARE @string VARCHAR(255) = '20130515103000'
SELECT CAST(LEFT(@string,8)+' '+SUBSTRING(@string,9,2)+':'+SUBSTRING(@string,11,2)+'.'+RIGHT(@string,2) AS DATETIME)

注意,我假设您的字符串格式为“yyyyMMDDHHMMSS”并且使用24小时,因为未显示AM / PM。

更新:该变量仅用于测试,实现它只是用日期时间字符串字段替换变量:

SELECT CAST(LEFT(survey_date,8)+' '+SUBSTRING(survey_date,9,2)+':'+SUBSTRING(survey_date,11,2)+'.'+RIGHT(survey_date,2) AS DATETIME) AS Expr1

答案 1 :(得分:2)

这是使用Stuff()功能。

首先将yyyymmddHHMMSS更改为yyyymmdd HH:MM:SS,然后将其转换为Datetime

--Example:
Declare @mydate nvarchar(250) = '20130515103000'
Select convert(datetime, stuff(stuff(stuff(@mydate, 9, 0,' '), 12,0,':'), 15,0,':'))

--Applied to your table column
Select convert(datetime, stuff(stuff(stuff(survey_date, 9, 0,' '), 12,0,':'), 15,0,':')) AS Expr1
From yourTable

<强> Fiddle demo

答案 2 :(得分:1)

转换前,您需要将输入字符串转换为正常的日期时间格式。 尝试:

Declare  @InputDateFormat  varchar(max)
Declare  @NormalFormatDateTime varchar(max)
Declare  @ConvertedDateTime datetime

--Declare
set  @InputDateFormat  = '20131020215735' --- YYYYMMDDHHMMSS

--Convert to the normal SQL format for a DateTime
set @NormalFormatDateTime =(select SUBSTRING(@InputDateFormat,0,5) + '/' + SUBSTRING(@InputDateFormat,5,2)  + '/' + SUBSTRING(@InputDateFormat,7,2) +  ' ' + SUBSTRING(@InputDateFormat,9,2) +':'+SUBSTRING(@InputDateFormat,11,2) +':' + RIGHT(@InputDateFormat,2))

-- Change type to DateType
select @ConvertedDateTime = CONVERT(DATETIME,@NormalFormatDateTime,20)

-- Display the result
select @ConvertedDateTime