0

我想订购这样的一套:

  • a2
  • 一个 1
  • b 9

不像正常的升序:

  • 一个 1
  • a2
  • b 9

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

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

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

希望有一些 SQL 人知道这个问题的答案:)

4

2 回答 2

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:

SELECT * FROM myTable order by myString, STRIP_NON_DIGIT(myString) DESC;

于 2012-10-12T14:10:35.780 回答
-1
select * from table name where "your query " and  "  " order by asc;

或者如果在降序使用“dec”你想要降序或升序的列放入“”

于 2012-10-11T12:14:15.213 回答