oracle数据库中文怎么排序规则

oracle数据库中文怎么排序规则,第1张

ORACLE数据库中文排序规则

oracle9i之前,中文是按照二进制编码进行排序的。

在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值

SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序

SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序

SCHINESE_PINYIN_M 按照拼音排序,系统的默认排序方式为拼音排序

alter session set nls_sort=’schinese_pinyin_m’

select * from dept order by nlssort(name,’NLS_SORT=SCHINESE_PINYIN_M’)

with ct as

(

select '第1号' as cj UNION ALL

select '第10号' as cj UNION ALL

select '第11号' as cj UNION ALL

select '第2号' as cj UNION ALL

select '第5号' as cj UNION ALL

select '第4号' as cj UNION ALL

select '第6号' as cj UNION ALL

select '第8号' as cj

)

SELECT SUBSTRING(cj,2,LEN(cj)-2),* from ct

ORDER BY convert(int,SUBSTRING(cj,2,LEN(cj)-2))

测试是ok的 但是像这种排序在数据量大的话 效率不高

数据的存储顺序和查出来后显示的顺序不同,看问题提出者的意思,是想改变数据的存储顺序。

可以充分利用主键,缺省的主键有聚簇索引特性,而聚簇索引的条目存放顺序与数据本身的存放顺序一致,充分利用这一点,改变主键或主键字段的取值,即可完成数据存储顺序的自编排。

例子中的id像是个常用的主键字段名,那么,修改某条记录的id值,无论是通过insert还是update,均已能够完成对应数据条目存储位置的变化。

如果想对根据任意字段实现存储顺序的自编排,恐怕是不行的,除非可以撤销表的原有主键,而将该字段设置为主键,但设为主键,就要求该字段的不可重复、不许为空等约束,而不是任意。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10800604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存