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 |