Sql json_build_object()中的大小写表达式
我想在我的json_build_对象中添加一个case表达式,用于尚未设置和Sql json_build_object()中的大小写表达式,sql,postgresql,case,Sql,Postgresql,Case,我想在我的json_build_对象中添加一个case表达式,用于尚未设置和endtime的时间 代码 当前 期望 结果 当前 期望 当endtime为空时,我希望totaltime是到现在为止的时间 { "endtime" : [" ", "2019-07-22 18:50:06", "2019-07-19 19:24:13", "2019-07-19 16:23:46"], "starttime" : ["2019-07
endtime
的时间
代码
当前
期望
结果
当前
期望
当endtime
为空时,我希望totaltime
是到现在为止的时间
{
"endtime" : [" ", "2019-07-22 18:50:06", "2019-07-19 19:24:13", "2019-07-19 16:23:46"],
"starttime" : ["2019-07-24 16:02:49", "2019-07-22 20:12:01", "2019-07-19 16:55:55", "2019-07-19 14:56:48"],
"totaltime" : ["01:2..timeTillNow", "01:21:55.150273", "-02:28:17.795901", "-01:26:57.872932"]
}
因为您使用的是聚合函数,如果在
json_agg
周围放置case when endtime
,那么您正在检查聚合的endtime
的值,并且它必须位于group by
中
相反,就像concat
一样,case
放在json\u agg
中。将为每一行计算此表达式,以提供要聚合的值
SELECT json_build_object(
'endtime', json_agg(
concat(endtime::timestamp::date, ' ', endtime::timestamp(0)::time )
),
'starttime', json_agg(
concat(starttime::timestamp::date, ' ', starttime::timestamp(0)::time )
),
'totaltime', json_agg(
case when endtime is null
then starttime::timestamp - NOW()::timestamp
else starttime::timestamp - endtime::timestamp
end
)
)
FROM jobs;
因为您使用的是聚合函数,如果在
json_agg
周围放置case when endtime
,那么您正在检查聚合的endtime
的值,并且它必须位于group by
中
相反,就像concat
一样,case
放在json\u agg
中。将为每一行计算此表达式,以提供要聚合的值
SELECT json_build_object(
'endtime', json_agg(
concat(endtime::timestamp::date, ' ', endtime::timestamp(0)::time )
),
'starttime', json_agg(
concat(starttime::timestamp::date, ' ', starttime::timestamp(0)::time )
),
'totaltime', json_agg(
case when endtime is null
then starttime::timestamp - NOW()::timestamp
else starttime::timestamp - endtime::timestamp
end
)
)
FROM jobs;
两个查询都有语法错误。你介意修一下吗?它们可能会导致混淆。您的两个查询都有语法错误。你介意修一下吗?它们可能会引起混乱。这正是我想要做的,只是不确定如何做。谢谢这正是我想做的,只是不知道怎么做。谢谢
{
"endtime" : [" ", "2019-07-22 18:50:06", "2019-07-19 19:24:13", "2019-07-19 16:23:46"],
"starttime" : ["2019-07-24 16:02:49", "2019-07-22 20:12:01", "2019-07-19 16:55:55", "2019-07-19 14:56:48"],
"totaltime" : ["01:2..timeTillNow", "01:21:55.150273", "-02:28:17.795901", "-01:26:57.872932"]
}
SELECT json_build_object(
'endtime', json_agg(
concat(endtime::timestamp::date, ' ', endtime::timestamp(0)::time )
),
'starttime', json_agg(
concat(starttime::timestamp::date, ' ', starttime::timestamp(0)::time )
),
'totaltime', json_agg(
case when endtime is null
then starttime::timestamp - NOW()::timestamp
else starttime::timestamp - endtime::timestamp
end
)
)
FROM jobs;