对含有字母和数字的列排序(replace函数和translate函数用法)


需求:字段混合了字母和数字的数据,希望按照字母部分或者数字部分进行来排序。


如元数据为:

在这里插入图片描述

需要按照该字段后面的数字进行排序。

那么,余光一扫,就会想到最简单的方法就是按照该字段的长度进行截取字符串,然后在排序,如:

SELECT DATA_INFO,substr(DATA_INFO,length(DATA_INFO)-1,2)AS SORTED 
  FROM DATATEST 
 ORDER BY 2;

这里的 ORDER BY 2,就是 SELECT 的第二个字段 SORTED ,等价于 ORDER BY SORTED ;
在这里插入图片描述

就这么简单?怎么突出极客精神?抱着学习的态度,可以使用一下 replace,translate 函数来玩儿一下:


** replace 用法:

replace(char, search_string,replacement_string)

将字符串 char 按照 被替换掉的字符串 search_string 中全部对应替换为 replacement_string。
不扯了,上例子:

select replace(‘fgsgswgosgsfk’, ‘gs’,‘j’) from dual;
在这里插入图片描述
结果为:fjjwgosjfk

注意:DB2、Oracle、PostgreSql、Informix、MySQL 、SQL Server 以及 Informix 都可使用 replace 函数!

** translate用法:

translate(expr, from_strimg, to_string)

按照字符串 expr中的 from_strimg 一一对应进行替换,若没有,则该字符串删除。

eg:

select translate(‘abcdefga’, ‘abc’,‘wo’) from dual;
在这里插入图片描述
结果为:wodefgw

注意:MySQL 、SQL Server 和 Informix 都不支持 translate 函数!


解决方式2:


则按照刚开始的需求,使用这两个函数,则SQL如下:

select * 
  from DATATEST
 order by replace(DATA_INFO,
                 replace(
                 translate(DATA_INFO, '0123456789','##########')
                 ,'#' ,'')
                 ,'')

在这里插入图片描述
没看懂,没关系,分步骤来。

① 将数字化为 # :

select translate(DATA_INFO, ‘0123456789’,’##########’) from DATATEST;
在这里插入图片描述
② 将 # 化为 无形,只显示字母:

select replace(translate(DATA_INFO, ‘0123456789’,’##########’),’#’,’’) from DATATEST;
在这里插入图片描述
③ 将字母替换为无形:

select replace(DATA_INFO,
      replace(translate(DATA_INFO, ‘0123456789’,’##########’),’#’,’’),’’)
  from DATATEST;
在这里插入图片描述
③ 按照数字进行排序。

注意:replace 函数和 translate 函数, MySQL 、SQL Server 和 Informix 不支持 translate 函数。

全篇到此结束。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值