Sql server 当我使用json_值时,如何在TSql中格式化日期

Sql server 当我使用json_值时,如何在TSql中格式化日期,sql-server,json,datetime,sql-server-2016,Sql Server,Json,Datetime,Sql Server 2016,我正在使用SQL Server 2016并存储json。当我提取它时,datetime格式不会显示为clean。如何设置日期时间格式 select JSON_VALUE(trade, '$.entrytime') AS entrytime from dbo.Trades 显示的值: 2016-05-23T05:21:30.3068919-04:00 2016-05-24T10:49:16.337257-04:00 2016-05-24T11:05:30.8941267-0

我正在使用SQL Server 2016并存储json。当我提取它时,datetime格式不会显示为clean。如何设置日期时间格式

select 
    JSON_VALUE(trade, '$.entrytime') AS entrytime 
from 
    dbo.Trades
显示的值:

2016-05-23T05:21:30.3068919-04:00
2016-05-24T10:49:16.337257-04:00
2016-05-24T11:05:30.8941267-04:00
2016-05-24T11:37:35.9555731-04:00

如何将这些日期格式化为
yyyy-mm-dd hh:mm:ss
格式?

是否要将以下时间戳格式化为其后面的时间戳:

2016-05-24T11:37:35.9555731-04:00
2016-05-24 11:37:35
下面的查询将
T
替换为一个空格,并将句点之后(包括句点)的所有内容都替换为子字符串

SELECT REPLACE(SUBSTRING(JSON_VALUE(trade, '$.entrytime'), 1,
                         CHARINDEX('.', JSON_VALUE(trade, '$.entrytime')) - 1),
               'T', ' ') AS entrytime
FROM dbo.Trades

您也可以使用
格式

select FORMAT(CAST(JSON_VALUE(trade, '$.entrytime') as datetimeoffset), 'yyyy-MM-dd hh:mm:ss') AS entrytime from dbo.Trades
选择CONVERT(VARCHAR(33),GetDate(),126)

选择LEFT(CONVERT(VARCHAR(33),GetDate(),126),19)+'Z'


可能值得一看

保存应用程序/演示层的日期/时间格式,不要在查询中执行此操作。您得到的格式是“干净的”-这是ISO 8601标准。我正在尝试在我的表示层中修复它。我正在运行查询以查看数据,并希望看到它的格式正确,以便我可以分析它。那么我该如何设置日期的格式才能正确地看到它呢?我在日期和时间之间没有空格。我怎样才能纠正它?2016-05-2305:21:30对不起,我用空字符串代替空格。再试一次,它现在应该可以工作了。当从字符串转换日期和/或时间时,我得到一个Msg 241,级别16,状态1,第10行转换失败。Agrr。。。忘记时区了。将其设置为
datetimeoffset
而不是
datetime
。由于这使其成为datetime对象,因此我更喜欢此解决方案。然而,出于某种奇怪的原因,sql server似乎需要几秒钟的时间来处理这个问题,尽管我只有25条json记录,但在sql server中没有使用json,我在这里无法提供帮助。我怀疑是JSON解析部分花费了很长时间。如果太长,则将字符串值提取到暂存表中,然后对该表应用
FORMAT