如何在SQL Server中将yyyymmddhhmmss + offset(20151125175706 + 0800)转换为日期时间格式?可以在日期时间比较中使用的内容,以选择在最后一分钟内在表格中输入的记录。
我从消息的OBX段获取此格式,并且我将其保存在表中的varchar字段中。
我试图这样做(除其他外):
QProcess
此查询仅提供表中1020行中的522行,并显示错误消息 "将varchar数据类型转换为日期时间数据类型会导致超出范围的值。"
请帮我解决这个问题。
答案 0 :(得分:1)
使用TRY_CONVERT查找错误值:
select pi.*
from (select try_convert(ddatetime,
(SUBSTRING(OBXDateTime, 1, 4) + '-' +
SUBSTRING(OBXDateTime, 5, 2) + '-' +
SUBSTRING(OBXDateTime, 7, 2) + ' ' +
SUBSTRING(OBXDateTime, 9, 2) + ':' +
SUBSTRING(OBXDateTime, 11, 2) + ':' +
SUBSTRING(OBXDateTime, 13, 2)
), 101) as datetime) as dte, pi.*
from ObservationPatInfo pi
) pi
where dte is null;
答案 1 :(得分:1)
你可以试试这个:
DECLARE @YourDt VARCHAR(100)='20151125175706+0800';
DECLARE @ISO8601_with_TimeZone VARCHAR(100);
--This will use multiple STUFFs to get the separators into your string
SELECT @ISO8601_with_TimeZone = STUFF(STUFF(STUFF(STUFF(STUFF(STUFF(@YourDt,18,0,':'),13,0,':'),11,0,':'),9,0,'T'),7,0,'-'),5,0,'-');
--This looks like a properly formatted datetime now: 2015-11-25T17:57:06+08:00
SELECT @ISO8601_with_TimeZone;
--Use DATETIME2 and code 127 to convert ISO8601 with TimeZone
SELECT CONVERT(datetime2,@ISO8601_with_TimeZone,127);