我正在尝试按数据库中的数字列排序,其值为1-999
我用的时候
ORDER_BY registration_no ASC
Run Code Online (Sandbox Code Playgroud)
我明白了......
1
101
102
103
104
105
106
107
108
109
11
110
Etc…
Run Code Online (Sandbox Code Playgroud)
所以它似乎是按第一个数字排序,与数字相反.
如果我想按值排序,有谁知道使用什么SQL?所以,1,2,3,4,5,6等
Gor*_*off 121
正整数排序的一种方式,当它们被存储为时,varchar首先按长度排序,然后按值排序:
order by len(registration_no), registration_no
Run Code Online (Sandbox Code Playgroud)
当列可能包含非数字值时,这尤其有用.
注意:在某些数据库中,可能会调用获取字符串长度的函数length()而不是len().
jue*_*n d 57
ORDER_BY cast(registration_no as unsigned) ASC
Run Code Online (Sandbox Code Playgroud)
显式地将值转换为数字.实现同样目标的另一种可能性是
ORDER_BY registration_no + 0 ASC
Run Code Online (Sandbox Code Playgroud)
这将强制进行隐含的对话.
实际上你应该检查表定义并进行更改.您可以将数据类型更改为int这样
ALTER TABLE your_table MODIFY COLUMN registration_no int;
Run Code Online (Sandbox Code Playgroud)
小智 12
如果您使用的是SQL Server:
ORDER_BY cast(registration_no as int) ASC
Run Code Online (Sandbox Code Playgroud)
小智 6
ORDER_BY cast(registration_no as unsigned) ASC
Run Code Online (Sandbox Code Playgroud)
给出带有警告的预期结果。
因此,最好去
ORDER_BY registration_no + 0 ASC
Run Code Online (Sandbox Code Playgroud)
对于没有任何 SQL 警告的干净结果。
| 归档时间: |
|
| 查看次数: |
139055 次 |
| 最近记录: |