我最近从SDF将一些空间数据导入SQL 2008。在导入过程中,DateTime字段作为nvarchar导入(254)。有关如何导入数据的示例如下:'20130515103000'
在设置我的视图时,我使用了SELECT CAST(survey_date AS DATETIME) AS Expr1
并出现以下错误:
从字符串转换日期和/或时间时转换失败。
据我所知,在转换或转换数据之前,我可能需要重新格式化我的数据以符合ISO-8601格式。我不知道该怎么做。
答案 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