怎样按日期排序LIST集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样按日期排序LIST集合相关的知识,希望对你有一定的参考价值。
参考技术A .net 可用 list.OrderBy(t=>t.date)如何解析此 JSON 以填充到 APEX 集合中并按日期排序
【中文标题】如何解析此 JSON 以填充到 APEX 集合中并按日期排序【英文标题】:How to parse this JSON to populate into APEX Collection and sort by date 【发布时间】:2020-12-06 05:17:52 【问题描述】:我在JSON
下方使用APEX_JSON
在Oracle 11gR2 数据库中进行解析。
我的要求是按closed_at
对日期进行排序并选择最新的close_reason。我正在考虑将closed_at
和close_reason
填充到APEX 集合中。对 apex_collections 中的日期进行降序排序以选择最新的close_reason
。
请你帮忙写一下APEX_JSON.get_count
和APEX_JSON.get_varchar2
来获取closed_at
和close_reason
。
"openings": [
"id": 5003,
"opening_id": null,
"status": "closed",
"opened_at": "2020-11-30T20:09:56.487Z",
"closed_at": "2020-12-02T22:43:45.736Z",
"application_id": 76370003,
"close_reason": null
,
"id": 8003,
"opening_id": null,
"status": "closed",
"opened_at": "2020-11-30T20:59:02.267Z",
"closed_at": "2020-12-04T11:07:26.087Z",
"application_id": 45990003,
"close_reason":
"id": 7003,
"name": "Hire - New Headcount"
]
谢谢 基肖尔
【问题讨论】:
【参考方案1】:在使用APEX_JSON.GET_VARCHAR2()
之前,需要在PL/SQL代码中解析APEX_JSON.PARSE()
。除了使用 PL/SQL,还可以通过使用XMLTABLE
直接使用 SQL,例如
WITH t1 AS
(
SELECT APEX_JSON.TO_XMLTYPE(jsdata) AS xml_data
FROM t0 -- suppose your json data is inserted into jsdata column of this table
), t2 AS
(
SELECT close_reason,
ROW_NUMBER() OVER
(ORDER BY TO_TIMESTAMP(closed_at, 'yyyy-mm-dd"T"hh24:mi:ss.ff"Z"') DESC) AS rn
FROM t1
CROSS JOIN
XMLTABLE('/json/openings/row'
PASSING xml_data
COLUMNS
closed_at VARCHAR2(100) PATH 'closed_at',
close_reason VARCHAR2(900) PATH 'close_reason/name'
)
)
SELECT close_reason
FROM t2
WHERE rn = 1
为了带来最新的关闭原因。
如果你真的需要使用问题中给出的那些函数,那么使用下面的代码块
DECLARE
v_json VARCHAR2(32767);
v_ct OWA.VC_ARR;
v_cr OWA.VC_ARR;
TYPE ts IS TABLE OF TIMESTAMP INDEX BY BINARY_INTEGER;
v_ts ts;
v_ts1 TIMESTAMP;
idx INT;
BEGIN
SELECT *
INTO v_json
FROM t0; -- there's no WHERE clause assuming only one row is to be inserted
APEX_JSON.PARSE(v_json);
FOR i IN 1..APEX_JSON.GET_COUNT('openings')
LOOP
v_ct(i) := APEX_JSON.GET_VARCHAR2('openings['||i||'].closed_at');
v_ts(i) := TO_TIMESTAMP(v_ct(i), 'yyyy-mm-dd"T"hh24:mi:ss.ff"Z"');
IF NVL(v_ts1, v_ts(i)) <= v_ts(i) THEN
v_ts1 := v_ts(i);
idx := i;
END IF;
v_cr(i) := APEX_JSON.GET_VARCHAR2('openings['||i||'].close_reason.name');
END LOOP;
DBMS_OUTPUT.PUT_LINE(v_cr(idx));
END;
/
【讨论】:
以上是关于怎样按日期排序LIST集合的主要内容,如果未能解决你的问题,请参考以下文章