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

Posted youngxuebo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对含有字母和数字的列排序(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


** translate用法:

translate(expr, from_strimg, to_string)

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

eg:

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

注意:replace 函数和 translate 函数 mysql 和 SQL Server 支持 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 支持 translate 函数。

全篇到此结束。

以上是关于对含有字母和数字的列排序(replace函数和translate函数用法)的主要内容,如果未能解决你的问题,请参考以下文章

oracle 表中如何对按含有字母和数字的编号来进行排序

如何组合两个数据框并自然地对混合字母数字类型的列进行排序?

SQLserver排序问题,字段中含有字母、数字、汉字,如何只按数字排序

在 SQL 中将字母转换为数字

含有对象的List集合实现字母数字混合排序

excel表格中数字中含有字母可以实现依次递增吗