如何将此特定的 varchar 转换为人类可读的日期格式?
Posted
技术标签:
【中文标题】如何将此特定的 varchar 转换为人类可读的日期格式?【英文标题】:How to convert this particular varchar to human readable date format? 【发布时间】:2021-12-10 00:18:40 【问题描述】:我想将actual_arrival
和actual_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 转换为人类可读的日期格式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中将 CamelCase 转换为人类可读的名称?