根据从varchar字段提取的子字符串进行数字排序

时间:2016-12-17 10:11:20

标签: mysql sql database

我有一个包含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行。

2 个答案:

答案 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

回答来自:Cast from VARCHAR to INT - MySQL

答案 1 :(得分:0)

您已从左侧删除了符号,但您需要在投射前从右侧删除}符号。像这样:

CAST(TRIM(TRAILING'}' FROM SUBSTRING(信息,16,LENGTH(信息)-16))AS INT)

顺便问一下,为什么要使用这样的表结构?用整数列来保持整数不是更好吗?

创建表信息(   NAME VARCHAR(20),   人口INT)