SqlServer按照指定顺序对字段进行排序

本文介绍了一种使用SQL中的charindex函数来实现特定顺序排序的方法,并通过一个具体的例子展示了如何操作。但这种方法存在一定的局限性,当数据发生变化时可能无法达到预期效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近的一个项目,使用存储过程对报表进行分析,其中有一些名称需要根据指定顺序显示,而其名称对应的编号并不是按照要求的顺序排列的。通过上网查找资料,发现sql 中的charindex函数可以帮助解决这个问题。但是这样做也有一个弊端,当添加新的名称后,可能就会达不到想要的结果了,没有通用性。

给出一个例子: 

create table test(
 id1 varchar(10),
 id2 varchar(10),
 name varchar(20)
);
insert into test values('100','1001','
ccc');
insert into test values('100','1002','
bbb');
insert into test values('100','1003','
aaa');
insert into test values('101','1010','
fff');
insert into test values('101','1011','
ddd');
insert into test values('101','1012','eee');

查询语句:

select * from dbo.test order by id1 ,CHARINDEX(id2,'1011,1012,1010,1003,1002,1001,');

查询结果如图所示

附 charindex函数说明截自百度百科):

语法
CHARINDEX ( expression1 , expression2 , [ start_location ] )
参数
expression1
一个 表达式,其中包含要寻找的 字符的次序。 expression1 是一个短 字符 数据类型分类的 表达式
expression2
一个 表达式,通常是一个用于搜索指定序列的列。 expression2 属于字符串数据类型分类。
start_location
在  expression2 中搜索  expression1 时的起始 字符位置。如果没有给定  start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。
返回类型
int


### SQL Server字段排序规则 在 SQL Server 中,字段排序规则(collation)决定了字符数据如何比较和排序。这不仅影响字符串的存储方式,还会影响查询性能以及跨数据库操作的一致性。 #### 查看现有字段排序规则 为了查看特定表中某个字段排序规则,可以使用如下 T-SQL 查询: ```sql SELECT c.name AS ColumnName, t.name AS TypeName, c.collation_name AS CollationName FROM sys.columns c JOIN sys.types t ON c.system_type_id = t.system_type_id WHERE object_id = OBJECT_ID('YourTableName') AND c.collation_name IS NOT NULL; ``` 此命令会返回给定表内所有具有显式定义排序规则的列的信息[^4]。 #### 创建带有自定义排序规则的新字段 当创建新表或向已有表添加新字段时,可以通过 `CREATE TABLE` 或者 `ALTER TABLE` 命令指定具体的排序规则: ```sql -- 新建表并设置某列为特定排序规则 CREATE TABLE ExampleTable ( ID INT PRIMARY KEY, Name NVARCHAR(50) COLLATE Latin1_General_CI_AS -- 使用区分大小写的拉丁语通用排序规则 ); -- 修改已存在表中的某一列以应用新的排序规则 ALTER TABLE ExistingTable ALTER COLUMN SomeColumn VARCHAR(MAX) COLLATE Chinese_PRC_CS_AS_SC; -- 更改为中文拼音全角半角敏感排序规则 ``` 上述例子展示了两种不同场景下设定排序规则的方法:一种是在新建表格的同时指定了名称栏位采用不区分大小写的拉丁字母集;另一种则是更改了一个现存表里某些文本型态的数据项为更严格的中国普通话拼音顺序,并且保持了对大小写字母的区别对待[^2]。 #### 调整整个数据库级别的默认排序规则 如果希望改变整个数据库内部所有后续新增对象所继承的基础排序属性,则需执行更为复杂的迁移过程。通常情况下建议通过备份还原的方式来进行这项工作,因为直接在线调整可能带来兼容性和稳定性方面的问题。具体步骤参见官方文档或其他权威资源获取指导[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值