Jam*_*mol 121 mysql sql string numbers sql-order-by
我将数字保存为VARCHARMySQL数据库.INT由于其他一些具体情况,我无法制作它们.
排序时将它们作为字符而不是数字.
在数据库中我有
1 2 3 4 5 6 7 8 9 10...
Run Code Online (Sandbox Code Playgroud)
在我的页面上,它显示如下的有序列表:
1 10 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
如何使数字按升序排列?
jue*_*n d 230
如果可能,您应该将列的数据类型更改为数字,如果您仍然只存储数字.
如果您不能这样做,那么将列值转换为integer 显式的
select col from yourtable
order by cast(col as unsigned)
Run Code Online (Sandbox Code Playgroud)
或隐含地,例如通过强制转换为数字的数学运算
select col from yourtable
order by col + 0
Run Code Online (Sandbox Code Playgroud)
BTW MySQL从左到右转换字符串.例子:
string value | integer value after conversion
--------------+--------------------------------
'1' | 1
'ABC' | 0 /* the string does not contain a number, so the result is 0 */
'123miles' | 123
'$123' | 0 /* the left side of the string does not start with a number */
Run Code Online (Sandbox Code Playgroud)
Vel*_*ter 61
另一种方式,不使用单一演员.
(适用于使用JPA 2.0且不允许进行转换的用户)
select col from yourtable
order by length(col),col
Run Code Online (Sandbox Code Playgroud)
编辑:仅适用于正整数
Los*_*ear 16
我正在排序的列有alpha和numeric的任意组合,所以我使用这篇文章中的建议作为起点并想出了这个.
DECLARE @tmp TABLE (ID VARCHAR(50));
INSERT INTO @tmp VALUES ('XYZ300');
INSERT INTO @tmp VALUES ('XYZ1002');
INSERT INTO @tmp VALUES ('106');
INSERT INTO @tmp VALUES ('206');
INSERT INTO @tmp VALUES ('1002');
INSERT INTO @tmp VALUES ('J206');
INSERT INTO @tmp VALUES ('J1002');
SELECT ID, (CASE WHEN ISNUMERIC(ID) = 1 THEN 0 ELSE 1 END) IsNum
FROM @tmp
ORDER BY IsNum, LEN(ID), ID;
Run Code Online (Sandbox Code Playgroud)
结果
ID
------------------------
106
206
1002
J206
J1002
XYZ300
XYZ1002
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
小智 8
这对我有用。
select * from tablename
order by cast(columnname as int) asc
Run Code Online (Sandbox Code Playgroud)
另一种转换方式。
如果您有字符串字段,您可以通过以下方式转换它或其数字部分:添加前导零以使所有整数字符串具有相等的长度。
ORDER BY CONCAT( REPEAT( "0", 18 - LENGTH( stringfield ) ) , stringfield )
Run Code Online (Sandbox Code Playgroud)
或按字段的一部分排序,例如“tensymbols13”、“tensymbols1222”等。
ORDER BY CONCAT( REPEAT( "0", 18 - LENGTH( LEFT( stringfield , 10 ) ) ) , LEFT( stringfield , 10 ) )
Run Code Online (Sandbox Code Playgroud)
小智 5
这将处理负数,分数,字符串,一切:
ORDER BY ISNUMERIC(col) DESC, Try_Parse(col AS decimal(10,2)), col;
Run Code Online (Sandbox Code Playgroud)