首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL datetime的奇怪(Cisco) datetime字符串

SQL datetime的奇怪(Cisco) datetime字符串
EN

Stack Overflow用户
提问于 2018-12-17 23:55:01
回答 1查看 37关注 0票数 0

尝试在SQL中导入相当不寻常的格式化日期时间字符串。源是来自思科网络系统的自动导出,我无法更改其格式。

格式为Sun Dec 02 03:59:54 CET 2018

尝试了datetimefrompart(),convert()与substring()的组合

代码语言:javascript
复制
CREATE FUNCTION [dbo].[Cisco2dateTime]
      ( @CDate varchar(28)) RETURNS datetime
    AS
    BEGIN
      RETURN ( datetimefromparts(
                right(@CDate,4), 
                case substring(@CDate,5,3) when 'Jan' then '01' when 'Feb' then '02' when 'Mar' then '03' when 'Apr' then '04' when 'May' then '05' when 'Jun' then '06' when 'Jul' then '07' when 'Aug' then '08' when 'Sep' then '09' when 'Okt' then '10' when 'Nov' then '11' when 'Dec' then '12' END,
                substring(@CDate,9,2),
                substring(@CDate,12,2),
                substring(@CDate,15,2),
                substring(@CDate,18,2),0) )
    END
 GO

}

有什么办法能更有效地做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-18 03:25:57

如果传入的格式是一致的,您可以将其缩小为如下所示:

代码语言:javascript
复制
DECLARE @time NVARCHAR(28) = 'Sun Dec 02 03:59:54 CET 2018'
SELECT CAST(SUBSTRING(@time,4,17) + RIGHT(@time,4) AS DATETIME)

返回2018-12-02 03:59:54.000

为@Clockwork-Muse编辑

如果你想包括时区信息,你可以使用时区表来匹配缩写,或者,如果你只有几个可能的时区,你可以使用表值构造函数,如新示例中的,它将返回一个timezoneoffset:

代码语言:javascript
复制
DECLARE @time NVARCHAR(30) = 'Sun Dec 02 03:59:54 CET 2018'

SELECT TODATETIMEOFFSET(CAST(SUBSTRING(@time,4,17) + RIGHT(@time,4) AS DATETIME), z.TZOffset)
FROM 
    (
        VALUES ('CET','+01:00'),('AST','+03:00'),('NZDT','+13:00')
    )AS z(TZName, TZOffset)
WHERE  @time LIKE '%'+z.TZName+'%'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53818703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档