如何将此特定的 varchar 转换为人类可读的日期格式?

Posted

技术标签:

【中文标题】如何将此特定的 varchar 转换为人类可读的日期格式?【英文标题】:How to convert this particular varchar to human readable date format? 【发布时间】:2021-12-10 00:18:40 【问题描述】:

我想将actual_arrivalactual_departure 转换为人类可读的日期,然后将所有内容都视为一个简单的表格。现在我收到一个错误:

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

怎么做?

Declare @json varchar(MAX) = '
"stops": 
            
                "type": "stop",
                "name": "stops",
                "company_id": "xxx",
                "actual_arrival": "20210910130000-0500",
                "actual_departure": "20210910140000-0500"
';

SELECT *
FROM OPENJSON ( @json, '$.stops' )             
WITH (          
            Type Varchar(50) '$.type',
            Name Varchar(50) '$.name',
            CompID Varchar(100) '$.company_id' ,
            AcArrvl DATETIME '$.actual_arrival' ,
            AcDprtr DATETIME '$.actual_departure') as j1

【问题讨论】:

您希望从样本数据中得到什么输出? 表格包含从“type”到“AcDprtr”的所有列(如您所见,其中有 5 个) 这并不能解释“人类可读的日期”。自***发明以来的基本循环油炸面包丁的数量("20210910130000-0500")是否会变成“在伟大的 Nonce 的轨道计算中的 Blursday 雀斑的一半”?显然不是,因为你只想要日期,所以雀斑不算数。 【参考方案1】:

我认为问题在于 datetimeoffset 的格式。此外,您可能希望转换为 datetimeoffset 以保留时间偏移?这对我有用(不是那么漂亮,但您必须将字符串重新格式化为yyyy-MM-dd hh:mm:ss-hh:mm):

Declare @json varchar(MAX) = '
"stops": 
            
                "type": "stop",
                "name": "stops",
                "company_id": "xxx",
                "actual_arrival": "20210910130000-0500",
                "actual_departure": "20210910140000-0500"
';

SELECT 
Type,
Name,
CompID,
CONVERT(DATETIMEOFFSET,
    STUFF(STUFF(STUFF(STUFF(STUFF(STUFF(AcArrvl,
    18,0,':'),
    13,0,':'),
    11,0,':'),
    9,0,' '),
    7,0,'-'),
    5,0,'-')
) AcArrvl,
CONVERT(DATETIMEOFFSET,
    STUFF(STUFF(STUFF(STUFF(STUFF(STUFF(AcDprtr,
    18,0,':'),
    13,0,':'),
    11,0,':'),
    9,0,' '),
    7,0,'-'),
    5,0,'-')
) AcDprtr

FROM OPENJSON ( @json, '$.stops' )             
WITH (          
            Type Varchar(50) '$.type',
            Name Varchar(50) '$.name',
            CompID Varchar(100) '$.company_id' ,
            AcArrvl VARCHAR(100) '$.actual_arrival' ,
            AcDprtr VARCHAR(100) '$.actual_departure') as j1

【讨论】:

以上是关于如何将此特定的 varchar 转换为人类可读的日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

在mysql中将纪元数转换为人类可读的日期

如何在 Java 中将 CamelCase 转换为人类可读的名称?

如何使用 sed 将纪元转换为人类可读的日期时间

将纪元转换为人类可读的日期在 python 中不起作用

如何停止 Pandas Dataframe read_json 方法将我的时代转换为人类可读的字符串

在Java中将字节大小转换为人类可读的格式?