Mysql 根据从varchar字段提取的子字符串进行数字排序
我有一个表,其中包含两列{城市名称和信息}Mysql 根据从varchar字段提取的子字符串进行数字排序,mysql,sql,database,Mysql,Sql,Database,我有一个表,其中包含两列{城市名称和信息} Name Info Qandahar {"Population": 237500} Kabul {"Population": 1780000} Herat {"Population": 186800} Mazar-e-Sharif {"Population": 127800} Amsterdam {"Population": 731200} Rotterdam {"Population": 593321} 等
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
但它什么也不输出。我得到错误1064(42000):您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“INT(FROM city)”附近使用的正确语法。您不能将其转换为
INT
以下是您可以强制转换的数据类型
BINARY[(N)]
CHAR[(N)]
日期
DATETIME
DECIMAL[(M[,D])]
SIGNED[INTEGER]
时间
无符号[整数]
SELECT
Name,
Info,
CAST(SUBSTRING(Info, 16, LENGTH(Info)-16) AS UNSIGNED) as info_cast
FROM city
order by info_cast
答案取自:您不能强制转换为
INT
以下是您可以强制转换的数据类型
BINARY[(N)]
CHAR[(N)]
日期
DATETIME
DECIMAL[(M[,D])]
SIGNED[INTEGER]
时间
无符号[整数]
SELECT
Name,
Info,
CAST(SUBSTRING(Info, 16, LENGTH(Info)-16) AS UNSIGNED) as info_cast
FROM city
order by info_cast
答案取自:您已经删除了左侧的符号,但您需要在施法之前删除右侧的}符号。像这样: 强制转换(从子字符串(Info,16,LENGTH(Info)-16)修剪(尾部'}')为INT) 顺便问一下,为什么要使用这样的表结构?有一个整数列来保存整数不是更好吗 创建表信息( 名称VARCHAR(20),
填充INT)您已经从左侧删除了符号,但在施放之前需要从右侧删除一个}符号。像这样: 强制转换(从子字符串(Info,16,LENGTH(Info)-16)修剪(尾部'}')为INT) 顺便问一下,为什么要使用这样的表结构?有一个整数列来保存整数不是更好吗 创建表信息( 名称VARCHAR(20),
人口INT)尝试在城市
中的之后使用order by
子句
尝试此选择名称,将(子字符串(Info,16,长度(Info)-16)转换为INT)作为Info\U从城市order by Info中转换为Info\U casti也会得到无效语法。如果您在没有order by的情况下测试请求?你有错误吗?@adikinzor请你提问以包含错误消息。尝试在城市的之后使用order by
子句
尝试此选择名称,CAST(SUBSTRING(Info,16,LENGTH(Info)-16)AS INT)AS Info\u CAST FROM city order by Info\u casti也会得到无效语法。如果你在没有order by的情况下测试请求?您有错误吗?@adikinzor请您提问以包含错误消息。