相关文章推荐
腼腆的茶叶  ·  word vba中 ...·  2 年前    · 
阳刚的土豆  ·  WebAssembly C++ ...·  2 年前    · 
幸福的芹菜  ·  docker alpine bashrc-掘金·  2 年前    · 

需求是这样的:
数据库表里面有一个字段类型是nvachar,存的值是数字和字符混合的,要实现先按数字排序,再按字母倒序。

思路:
考虑这个字段的值是否是有规律可循的,把要按数字排序的部分转换为数字,再把剩下的字符排序。

数据表是下面这样的:

LevelName就是那个数字和字母混合的字段。
我这个表里存的LevelName都是数字+单个字符的格式。于是可以把前面的部分转换为数字,按数字排,剩下的部分按字母排。

语句这样写:

SELECT * FROM dbo.Level
ORDER BY CONVERT(INT, LEFT(LevelName, LEN(LevelName)-1)) ASC, RIGHT(LevelName, 1) DESC

查询结果:

PS:4B 比 4A 小。

选择合适的 SQL Server 字符集 错误使用 SQL Server 的字符集 参考资料正确认识 SQL Server 的字符集 SQL Server 作为一个国际化产品,支持多语言环境。在 SQL Server 中,字符集被称为 排序 规则(即Collation)。 排序 规则不仅影响记录行的sort顺序,还影响中文显示是否乱码等。在 SQL Server 中, 排序 规则可在3 在实际项目需求中可能会遇到这种情况:需要从数据库中获取某些数据,然后在前端通过列表的形式展现出来,但是展现的列表需要根据某个字段进行 排序 ,而这个字段的内容又是由字符和 数字 组合而成的,那么应该如何根据 数字 进行 排序 呢? 从数据库获取数据的同时通过order by来控制需要 排序 的字段,这样会默认根据 数字 进行 排序 ,但是存在的问题是会先取 数字 的第一位按从大到小进行 排序 ,然后取第二位进... 本文是“打印矩阵”系列的第三篇文章。我们再次把难度提升,使用 SQL 打印出如下表所示的矩阵。规则:使用 1~25 的 数字 依序填充矩阵;从第一行第一列开始填充,沿着列的方向进行。如果是奇数列,从上往下填;如果是偶数列,则从下往上填;第一列填满就到第二列,再到第三列,直到把矩阵都填满。这个需求比前两篇的复杂度高,主要在于我们没法一下子看出每行数据出现的规律。没思路?没关系,继续往下看就是了。第一步,... AND CUST_ID = '9999000004' AND INV_FLG = '0' AND MAIL_ADDR_NO_TYPE IN ('1', '2', '11', '12') ORDER BY MAIL_ADDR_NO_TYPE ASC 现 SQL (转换成int型 排序 ) SELECT SELECT id, rownum FROM test ORDER BY RIGHT(REPLICATE('0',10)+CAST(rownum AS varchar(10)),10) ASC 1.不建议转换成 数字 类型在order by,因为数据存在字符时,可能转换失败。 2.使用RIGHT方法,格式化 字符串 ,如上述代码所示,假设rownum字段长度为10,数据中包... 原有表中的点击次数用的是 字符串 型,现要求按点击次数 排序 ,select  *  from table t order by  t.click desc查出的是按左对齐 排序 的99979897837而我要求的是按 数字 大小排的序要修改为select  *  from table t order by  cast   (t.click   as   int) desc7839 使用的是 SQL server 数据库测试,其他数据库类似. 默认 排序 是按ID进行 排序 的 select stu_id ,stu_name from student order bystu_id. 现在需要按姓名 排序 ,姓名数据类型是字符,但里面的内容 数字 . 如果不是纯 数字 ,无法进行强制转换 select stu_id ,stu_name from student order b... 很多时候需要在查询时产生顺序的 数字 记录,下面两个方法非常实用:1.利用系统表 ;with t as(    SELECT            x = ROW_NUMBER() OVER            (ORDER BY s1.[object_id])        FROM       sys.objects AS s1        CROSS JOIN sys.objects AS... 应用于B1-1,B1-2,B10-1,B11-1 sql server 肯定不能按照 字符串 进行 排序 ,需要进行处理一番:   select CONVERT(varchar, LEFT(code,1)),convert(int, RIGHT(Replace(code,'-',''), LEN(code)-2)) from xxx a where 1 = 1 order by CONVERT(varc... 项目业务需要,给每组记录编号,方便在行转列时,正对每个人定位到具体某行; SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组 排序 功能使这种操作变得非常简单。