我有一个包含2列{城市名称和信息}
的表格Name Info
Qandahar {"Population": 237500}
Kabul {"Population": 1780000}
Herat {"Population": 186800}
Mazar-e-Sharif {"Population": 127800}
Amsterdam {"Population": 731200}
Rotterdam {"Population": 593321}
等等。我尝试按人口排序,但这不起作用
SELECT Name,Info ORDER BY CAST(SUBSTRING(Info, 16, LENGTH(Info)-16) AS INT) FROM city
但它什么也没输出。我得到ERROR 1064(42000):你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在“城市”附近使用正确的语法' INT)FROM city'在第1行。
答案 0 :(得分:0)
您无法投射为INT
以下是您可以投射的数据类型
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
你需要使用它:
SELECT
Name,
Info,
CAST(SUBSTRING(Info, 16, LENGTH(Info)-16) AS UNSIGNED) as info_cast
FROM city
order by info_cast
答案 1 :(得分:0)
您已从左侧删除了符号,但您需要在投射前从右侧删除}符号。像这样:
CAST(TRIM(TRAILING'}' FROM SUBSTRING(信息,16,LENGTH(信息)-16))AS INT)
顺便问一下,为什么要使用这样的表结构?用整数列来保持整数不是更好吗?
创建表信息( NAME VARCHAR(20), 人口INT)