我有一个像这样的json值的表:
-表格1
id | name | data
------+----------+---------------
1 | Test | {"city_id": 3, "email":"test@test.com", "city_name":"something"}
2 | Test 2 | {"city_id": 1, "email":"test2@test2.com", "city_name":"another"}
3 | Test 3 | {"city_id": 6, "email":"test3@test3.com", "city_name":"blahblah"}
Run Code Online (Sandbox Code Playgroud)
现在我想要SELECT记录order by data.city_name,所以我使用这段代码:
SELECT id, name, JSON_EXTRACT(data, 'city_name') AS cityName
FROM table1
ORDER BY cityName ASC
Run Code Online (Sandbox Code Playgroud)
但是这个查询无法正确排序我的记录!
PS:city_name有UTF-8字符.
Sud*_*oti 15
您似乎没有正确使用JSON_EXTRACT(),请尝试:
SELECT id, name, JSON_EXTRACT(data, '$.city_name') AS cityName
FROM demo ORDER BY cityName ASC
Run Code Online (Sandbox Code Playgroud)
我通常将JSON 值 ( ->> ) 转换为正确的类型以便正确排序:
SELECT id, name, data->>'$.city_name' AS cityName
FROM table1
ORDER BY CAST(cityName AS CHAR) ASC
Run Code Online (Sandbox Code Playgroud)
否则,您最终将排序为 blob(二进制),它们被视为二进制字符串(字节字符串),因此它们具有二进制字符集和排序规则,并且比较和排序基于列值中字节的数值(参考)。
我认为最简单的方法
SELECT * FROM YourTable order by data->"$.city_name" desc
Run Code Online (Sandbox Code Playgroud)
检查这个。
SELECT Id ,name,SUBSTRING_INDEX(SUBSTRING_INDEX(data,'city_name":"',-1),'"',1) as CITY
FROM tempjson
order by SUBSTRING_INDEX(SUBSTRING_INDEX(data,'city_name":"',-1),'"',1)
Run Code Online (Sandbox Code Playgroud)
输出 :
| 归档时间: |
|
| 查看次数: |
6945 次 |
| 最近记录: |