在遺留的系統(tǒng)趟咆,可以存在這樣的場景:
非json類型字段呵扛,存儲著json串电湘。我們在select的時候隔节,期望獲取該字段中的部分屬性值。
例如:
CREATE TABLE IF NOT EXISTS `good` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`histories` LONGTEXT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
我們的good表中histories是一個LONGTEXT類型胡桨,非json類型官帘,但它里面存在的json串。例如:
[{"status": "Start", "createdTime": "2021-09-01 11:44:17"},{"status": "End", "createdTime": "2021-09-01 11:44:17"}]
格式化后:
[{
"status": "Start",
"createdTime": "2021-09-01 11:44:17"
}, {
"status": "End",
"createdTime": "2021-09-01 11:44:17"
}]
- 如果我們需要獲取json數(shù)組中的第一個對象昧谊,我們可以采用如下的sql刽虹。
select id,
JSON_EXTRACT(histories, '$[0]')
from good;
- 如果需要獲取json數(shù)組中的第二個對象中的status屬性的值,可以采用如下的sql呢诬。
select id,
JSON_EXTRACT(histories -> '$[1]', '$.status')
from good;