Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql json_build_object()中的大小写表达式_Sql_Postgresql_Case - Fatal编程技术网

Sql json_build_object()中的大小写表达式

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

我想在我的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-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;