从mysql中的同一列按文本asc和数字desc排序字符串

时间:2012-10-11 12:06:38

标签: mysql sorting

我想点这样的一套:

  • a 2
  • a 1
  • b 9

不像正常的升序:

  • a 1
  • a 2
  • b 9

换句话说,我有一个带有一些文字的列,有时候还有一个数字。我希望所有带有数字的字段最后按数字降序排序,但前导文本仍然必须按升序排序。

字符串不只是1个字符长,但长度未知,数字也不仅仅是1个字符长,而且长度未知,并且不能保证在字符串末尾可能看起来像:随机事件,第12次“

如果我有一个类似“随机事件,第12次”的字符串,我希望它出现在我的结果之前:“随机事件,第11次”。

希望有一些SQL人知道答案:)

2 个答案:

答案 0 :(得分:1)

你可以创建一个隔离你想要订购的号码的功能。例如。像这样的东西(在MySQL strip non-numeric characters to compare找到)

DROP FUNCTION IF EXISTS STRIP_NON_DIGIT;
DELIMITER $$
CREATE FUNCTION STRIP_NON_DIGIT(input VARCHAR(255))
   RETURNS INT
   DETERMINISTIC
BEGIN
   DECLARE output   VARCHAR(255) DEFAULT '';
   DECLARE iterator INT          DEFAULT 1;
   WHILE iterator < (LENGTH(input) + 1) DO
      IF SUBSTRING(input, iterator, 1) IN ( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ) THEN
         SET output = CONCAT(output, SUBSTRING(input, iterator, 1));
      END IF;
      SET iterator = iterator + 1;
   END WHILE;
   RETURN output;
END
$$

现在运行你的sql:

通过myString SELECT STR FROM myTable命令,STRIP_NON_DIGIT(myString)DESC;

答案 1 :(得分:-1)

select * from table name where "your query " and  "  " order by asc;

或者如果在降序中使用“dec” 您希望降序或升序的列放在“”