oracle中含数字字母混合字符串按字母来排序的解决办法

本文通过具体实例对比了SQL中translate与replace函数的功能差异。translate函数能够逐字符替换,而replace函数则将指定字符串视为整体进行替换。通过创建视图和查询的方式展示了这两种函数在实际应用中的效果。

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

在工作中遇到一个问题,当时不会解决,了解translate函数后(语法translate('char','from_string','to_string'),char原始列,将from_string替换为to_string,且为一个字符一个字符的替换,且to_string不为空),进行试验验证最终明白了,以下是做的验证

SELECT ename || ' ' || empno  AS data FROM EMP;-----查看原始数据效果

SELECT * FROM V;


SELECT DATA,translate(data,', 1234567890',',') AS  ename FROM V order by 2;-----查看被替换筛选后的效果


其中红色的逗号不做替换,只是占个位置,保证第三参数不为空,反之会出现空值,逗号可以用其他符号代替

别人也举了一个例子,我进行了试验,效果是一样的

CREATE OR REPLACE VIEW w AS
SELECT '-0' AS str FROM dual UNION ALL
SELECT '-123' AS str FROM dual UNION ALL
SELECT '-456' FROM dual UNION ALL
SELECT '-789' FROM dual UNION ALL
SELECT '-1.23' AS str FROM dual UNION ALL
SELECT '-.789' FROM dual UNION ALL
SELECT '-' FROM dual UNION ALL
SELECT '-123x' AS str FROM dual UNION ALL

SELECT '7-' FROM dual;

select * from w;


SELECT w.str, translate(str, '-0123456789', '-') AS str2 FROM w  WHERE translate(str, '-0123456789', '-') = '-'   AND str LIKE '-_%';


replace函数也可以进行替换,但是有什么不同呢,同样进行了测试

(图一)(图二)(图三)

SELECT DATA,replace(data,'78','#') AS  ename from V order by 2;---结果为(图二)

SELECT DATA,translate(data,'78','#') AS  ename from V order by 2;---结果为(图三)

replace函数是'78'作为一个整体去替换#,translate函数是将7和8分别替换为#,比较浅显的区别就是如此

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值