Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据从varchar字段提取的子字符串进行数字排序_Mysql_Sql_Database - Fatal编程技术网

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请您提问以包含错误消息。