Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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将字符串排序为整数,先排序为整数_Mysql_Innodb - Fatal编程技术网

MySQL将字符串排序为整数,先排序为整数

MySQL将字符串排序为整数,先排序为整数,mysql,innodb,Mysql,Innodb,这将返回以下结果: SELECT code FROM lock ORDER BY code * 1 我需要更改查询,使其按以下顺序返回code行: |code| |T6 | |X30 | |4 | code列的类型为VARCHAR,因此在查询中使用hacky cast。有什么想法吗?嗯……我知道一个难看但有效的解决方案:) REGEXP将在匹配时返回1,在没有匹配时返回0 ORDER BY `code` REGEXP '^[0-9]+$' DESC, `code` DESC

这将返回以下结果:

SELECT code
FROM lock
ORDER BY code * 1
我需要更改查询,使其按以下顺序返回
code
行:

|code| 
|T6  |
|X30 |  
|4   |

code
列的类型为
VARCHAR
,因此在查询中使用hacky cast。有什么想法吗?

嗯……我知道一个难看但有效的解决方案:)

REGEXP将在匹配时返回1,在没有匹配时返回0

ORDER BY
`code` REGEXP '^[0-9]+$' DESC,
`code` DESC
  • 现场观看它的工作

    • 一种可能的解决方案是:

      SELECT 
      *
      FROM t
      ORDER BY 
      CAST(code AS signed) > 0 DESC,
      code
      

      所以排序总是基于访问顺序中的数字,并且它们总是在末尾?您是要解释字符串中的每个数字,还是仅当整个字符串都是数字时才将字符串视为数字?
      SELECT 
      *
      FROM t
      ORDER BY 
      CAST(code AS signed) > 0 DESC,
      code
      
      SELECT  *
      FROM       lock
      ORDER BY CASE WHEN code LIKE '%[0-9]%' THEN 1
                  ELSE 0
              END ASC ,
              code