需求是这样的:
数据库表里面有一个字段类型是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()函数的分组
排序
功能使这种操作变得非常简单。