oracle 排 序

oracle9i中新增了按照拼音、部首、笔画排序功能

用法示例: 拼音

SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_PINYIN_M')

笔划

 SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_STROKE_M')

部首

SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_RADICAL_M')

如果需要排序影响整个会话,可以作如下设置:

 ALTER SESSION SET NLS_SORT='对应方式';

### Oracle 中字符串排序时处理数字 '10' 的解决方案 当在 Oracle 数据库中对包含数字和字母混合的字符串进行排序时,可能会遇到不符合预期的结果。例如,在按数值顺列时,“10”可能被在“2”的前面,这是因为默认情况下数据库按照 ASCII 值逐字符比较两个字符串。 为了实现正确的自然数列,可以采用正则表达式提取出字符串开头连续出现的一串数字并将其转换成整型来进行对比[^5]: ```sql SELECT * FROM your_table ORDER BY TO_NUMBER(REGEXP_SUBSTR(your_column, '^\d+')) ASC; ``` 上述 SQL 语句通过 `REGEXP_SUBSTR` 函数匹配每一行数据中第一个纯数字列,并利用 `TO_NUMBER()` 将其转化为实际可参与运算计算的数据类型——NUMBER 类型,从而实现了基于该部分数字的真实大小关系完成记录间的升/降调整。 对于更加复杂的场景下(比如存在多个嵌入式的数字),可以根据具体需求编写自定义 PL/SQL 函数或者使用其他高级特性如模型子查询来达到目的。 #### 处理带有额外描述信息的情况 如果目标字段不仅限于简单的 “数字+空格+名称”,而是像 "第 N 批次" 这样的模式,则可以在原有基础上进一步优化 ORDER BY 子句: ```sql WITH parsed_data AS ( SELECT id, REGEXP_REPLACE(description,'(\D*)(\d+)\s*(.*)','\2') as num_part -- 提取出中间位置的数字作为排序依据 FROM batch_info ) SELECT * FROM parsed_data pd JOIN original_table ot ON pd.id = ot.id ORDER BY CAST(pd.num_part AS NUMBER); ``` 此方法首先创建了一个临时视图parsed_data用于分离原始文本中的数字成分;之后再与其他所需展示的信息联结起来最终输出结果集的同时完成了合理的排序逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值