ITPub博客

首页 > 数据库 > Oracle > oralce针对汉字的排序

oralce针对汉字的排序

原创 Oracle 作者:老w爱db 时间:2024-02-21 16:05:23 0 删除 编辑

在Oracle 9i之前,汉字排序是基于二进制编码。从Oracle 9i起,引入了更加灵活的汉字排序方式,主要有三种:

  1. 拼音排序 ( NLS_SORT=SCHINESE_PINYIN_M )

  2. 笔画排序 ( NLS_SORT=SCHINESE_STROKE_M )

  3. 偏旁部首排序 ( NLS_SORT=SCHINESE_RADICAL_M )

这些排序方式可以在不同的级别上设置,包括语句级别、会话级别和系统级别,以满足不同的应用需求。

1. 语句级别设置排序方式

  • 按笔画排序

    
    
    
    SELECT * FROM table ORDER BY nlssort(col, 'NLS_SORT=SCHINESE_STROKE_M');
  • 按部首排序

    
    
    
    SELECT * FROM table ORDER BY nlssort(col, 'NLS_SORT=SCHINESE_RADICAL_M');
  • 按拼音排序

    
    
    
    SELECT * FROM table ORDER BY nlssort(col, 'NLS_SORT=SCHINESE_PINYIN_M');

2. Session级别设置

  • 按拼音

    
    
    
    ALTER SESSION SET nls_sort = SCHINESE_PINYIN_M;
  • 按笔画

    
    
    
    ALTER SESSION SET nls_sort = SCHINESE_STROKE_M;
  • 按偏旁

    
    
    
    ALTER SESSION SET nls_sort = SCHINESE_RADICAL_M;

3. 系统参数设置

  • Linux/Unix

    
    
    
    export NLS_SORT=SCHINESE_RADICAL_M
  • Windows

    
    
    
    在注册表中设置:HKLC\SOFTWARE\ORACLE\home0\NLS_SORT=SCHINESE_RADICAL_M

检查设置

为了验证排序设置是否生效,可以使用以下查询来查看Oracle的一些默认参数:




SELECT * FROM nls_database_parameters WHERE parameter LIKE '%NLS_SORT%';


案例:

建表:

CREATE TABLE students (

  id INT PRIMARY KEY,

  name VARCHAR2(50),

  score INT

);


插入数据:

INSERT INTO students (id, name, score) VALUES (1, '张三', 88);

INSERT INTO students (id, name, score) VALUES (2, '李四', 95);

INSERT INTO students (id, name, score) VALUES (3, '王五', 76);

INSERT INTO students (id, name, score) VALUES (4, '赵六', 82);

INSERT INTO students (id, name, score) VALUES (5, '陈七', 91);


演示不同的排序方式

按拼音排序:

按笔画排序:

按偏旁部首排序:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70021989/viewspace-3007001/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
数据库技术爱好者

注册时间:2022-09-12

  • 博文量
    75
  • 访问量
    67647