【问题标题】:Convert varchar (eg. 20151125175706+0800) to Datetime in SQL在 SQL 中将 varchar(例如 20151125175706+0800)转换为 Datetime
【发布时间】:2016-10-25 12:54:43
【问题描述】:

如何在 SQL Server 中将 yyyymmddhhmmss+offset (20151125175706+0800) 转换为日期时间格式?可以在日期时间比较中用于选择最后一分钟在表中输入的记录。

我从消息的 OBX 段中获取此格式,并将其保存在表中的 varchar 字段中。

我尝试过这样做(除其他外):

select cast(convert(varchar,  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) from ObservationPatInfo

此查询仅给出表中 1020 行中的 522 行,并给出错误消息 “将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”

请帮我解决这个问题。

【问题讨论】:

标签: sql-server datetime


【解决方案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);

【讨论】:

    【解决方案2】:

    使用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;
    

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多