[英]Can I do case insensitive search with JSON_EXTRACT in MySQL?
[英]How do I apply json_extract element-wise in MySQL?
我有一列 json,我想從中提取一個特定的值。 但是,此值位於兩個不同的關鍵字下,即特性或特性。 我有這樣的事情:
+-----------------------+
| Json id |
+-----------------------+
| {feature: 1} 123 |
| {features: 2} 223 |
| {feature: 3} 323 |
| {features: 4} 423 |
+-----------------------+
我想要這樣的東西:
+-----------------------+
| features id |
+-----------------------+
| 1 123 |
| 2 223 |
| 3 323 |
| 4 423 |
+-----------------------+
如何將 json_extract 應用於每一行以獲得我想要的值? 我試過了
SELECT json_extract(json, path) FROM tbl
但 json_extract 似乎只適用於一個定義的路徑,並且似乎不接受變量作為路徑。
一種選擇是使用13.5 Prepared Statements :
SET
@`path` := 'feature';
SET
@`qry` := CONCAT('
SELECT
JSON_EXTRACT(`json`, \'$.', @`path`, '\') ', @`path`, ',
`id`
FROM
`tbl`;
');
PREPARE `stmt` FROM @`qry`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;
請參閱dbfiddle 。
更新
SET
@`path` := '\'$.feature\', \'$.features\'',
@`alies` := 'features';
SET @`qry` :=
CONCAT('
SELECT
`der`.`', @`alies`,'` ->> \'$[0]\' `', @`alies`, '`,
`der`.`id`
FROM (
SELECT
JSON_EXTRACT(`json`, ', @`path`, ') `', @`alies`, '`,
`id`
FROM
`tbl`
) `der`;
');
PREPARE `stmt` FROM @`qry`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;
請參閱dbfiddle 。
這個值位於兩個不同的關鍵字下,要么是
'feature'
要么'features'
。
如果您有一個預定義的可能鍵列表,您可以使用它們一一嘗試並使用coalesce()
進行選擇:
select coalesce(js ->> '$.feature', js ->> '$.features') feature, id
from mytable
feature | id :------ | --: 1 | 123 2 | 223 3 | 323 4 | 423
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.