Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 是否可以按具有mix值的升序对varchar数据进行排序?_Mysql_Sql_Sorting_Select_Sql Order By - Fatal编程技术网

Mysql 是否可以按具有mix值的升序对varchar数据进行排序?

Mysql 是否可以按具有mix值的升序对varchar数据进行排序?,mysql,sql,sorting,select,sql-order-by,Mysql,Sql,Sorting,Select,Sql Order By,我有它的表定义: 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`,

我有它的表定义:

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

3
6
12
13
keyur
这是varchar数据,所以我完全不知道如何做,或者这是否真的可能?
因此,请建议有可能吗?

您的intdata包含varchar-这是字母数字排序

SELECT * 
FROM table2 
ORDER BY CAST(intdata as int) asc;
试试这个:

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

输出

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

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

输出:

| ID | VARCHARDATA | INTDATA | |----|-------------|---------| | 3 | 3 | 3 | | 5 | 6 | 6 | | 1 | 12 | 12 | | 4 | 13 | 13 | | 2 | keyur | 7 | |ID | VARCHARDATA | INTDATA| |----|-------------|---------| | 3 | 3 | 3 | | 5 | 6 | 6 | | 1 | 12 | 12 | | 4 | 13 | 13 | |2 | keyur | 7|
这里是伟大的萨哈什·贝戈德思想作品的演示,尽管
0
将被视为非数值 | ID | VARCHARDATA | INTDATA | |----|-------------|---------| | 3 | 3 | 3 | | 5 | 6 | 6 | | 1 | 12 | 12 | | 4 | 13 | 13 | | 2 | keyur | 7 |