【问题标题】:Is it possible to sort varchar data in ascending order that have mix value?是否可以按升序对具有混合值的 varchar 数据进行排序?
【发布时间】:2013-12-11 10:56:02
【问题描述】:

SQL FIDDLE

我有它的表定义:

CREATE TABLE `table2` (
  `id` INT NOT NULL,
  `varchardata` VARCHAR(45) NULL,
  `intdata` INT(10) NULL,
  PRIMARY KEY (`id`));

数据:

INSERT INTO `table2` (`id`, `varchardata`, `intdata`) VALUES ('1', '12', '12');
INSERT INTO `table2` (`id`, `varchardata`, `intdata`) VALUES ('2', 'keyur', '7');
INSERT INTO `table2` (`id`, `varchardata`, `intdata`) VALUES ('3', '3', '3');
INSERT INTO `table2` (`id`, `varchardata`, `intdata`) VALUES ('4', '13', '13');
INSERT INTO `table2` (`id`, `varchardata`, `intdata`) VALUES ('5', '6', '6');

当我执行查询时:

SELECT * FROM table2 order by intdata asc;

它给出了结果:

是否可以按某种顺序对数据进行排序,以使其接受并给出 o/p as

3
6
12
13
keyur

这是 varchar 数据,所以我完全不知道该怎么做,或者它实际上是否可能? 所以建议请这是可能的吗?

【问题讨论】:

    标签: mysql sql sorting select sql-order-by


    【解决方案1】:

    另一种正确对待0的方法(将其与非数字值区分开来)

    SELECT id, varchardata, intdata
      FROM 
    (
      SELECT id, varchardata, intdata, varchardata REGEXP '[0-9]' is_numeric
        FROM table2 
    ) q
      ORDER BY is_numeric DESC, 1 * varchardata
    

    输出:

    |身份证 |变量数据 |数据 | |----|-------------|---------| | 3 | 3 | 3 | | 5 | 6 | 6 | | 1 | 12 | 12 | | 4 | 13 | 13 | | 2 |凯尔 | 7 |

    这里是SQLFiddle演示

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT * 
      FROM table2 
      ORDER BY IF(CAST(varchardata AS SIGNED) = 0, 99999, CAST(varchardata AS SIGNED));
      

      查看SQL FIDDLE DEMO

      输出

      | ID | VARCHARDATA | INTDATA |
      |----|-------------|---------|
      |  8 |           3 |       3 |
      | 10 |           6 |       6 |
      |  6 |          12 |      12 |
      |  9 |          13 |      13 |
      |  7 |       keyur |       7 |
      

      【讨论】:

      • 伟大的工作 Saharsh Bhai
      • 好主意,虽然0 将被视为非数字值
      【解决方案3】:

      您的 intdata 包含 varchar - 因为它是字母数字排序

      SELECT * 
      FROM table2 
      ORDER BY CAST(intdata as int) asc;
      

      【讨论】:

        猜你喜欢
        • 2011-12-18
        • 1970-01-01
        • 2013-08-22
        • 2018-10-17
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        相关资源
        最近更新 更多