У меня есть требование, я хочу создать предложение where на основе ввода JSON. Подобные фильтры предоставляются как входные данные из тела запроса (JSON). Таким образом, он может содержать условия И и ИЛИ. Я пробовал немного, но предложение where, как показано ниже. Но я хочу сделать его более надежным. Может ли кто-нибудь предложить лучший формат JSON для достижения этой цели?
Я предоставляю образец JSON, который был закодирован, и предложение where построено с его использованием.
{"filter": [
{
"operator": "AND",
"operands":[ {
"paramName": "publishDate",
"operator":"gt",
"paramValue":"2020-02-06T00:00:00.000Z"
},
{
"paramName": "binName",
"operator":"co",
"paramValue":"30"
}
]
},
{
"operator": "OR",
"operands":[ {
"paramName": "itemName",
"operator":"eq",
"paramValue":"Test1"
},
{
"paramName": "itemName",
"operator":"eq",
"paramValue":"pqre"
}
]
},
{
"operator": "OR",
"operands":[ {
"paramName": "kpiName",
"operator":"eq",
"paramValue":"Test1"
},
{
"paramName": "kpiName",
"operator":"eq",
"paramValue":"pqre"
}
]
}
]
}
Конечный пункт вывода
AND (
PUBLISH_DATE > TO_TIMESTAMP ('2020-02-06 05:30:00.0','yyyy-mm-dd hh24:mi:ss.ff')
AND BIN_NAME like '%30%'
)
AND (
CONCATENATED_SEGMENTS = 'Test1'
OR CONCATENATED_SEGMENTS = 'pqre'
)
AND (
KPI_NAME = 'Test1'
OR KPI_NAME = 'pqre'
)
Ожидание:
AND (
publish_date > to_timestamp('2020-02-06 05:30:00.0','yyyy-mm-dd hh24:mi:ss.ff')
AND bin_name LIKE '%30%'
**OR ParamName1 = PARAMVALUE_1
OR ParamName2 > PARAMVALUE_2**
)
AND (
(concatenated_segments = 'Test1'
OR concatenated_segments = 'pqre')
**AND TEST_PARAM = PARAM_VAL_1**
)
AND (
kpi_name = 'Test1'
OR kpi_name = 'pqre'
)