需求:字段混合了字母和数字的数据,希望按照字母部分或者数字部分进行来排序。
如元数据为:
需要按照该字段后面的数字进行排序。
那么,余光一扫,就会想到最简单的方法就是按照该字段的长度进行截取字符串,然后在排序,如:
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(char, search_string,replacement_string)
将字符串 char 按照 被替换掉的字符串 search_string 中全部对应替换为 replacement_string。select replace(‘fgsgswgosgsfk’, ‘gs’,‘j’) from dual;
结果为:fjjwgosjfk
translate(expr, from_strimg, to_string)
按照字符串 expr中的 from_strimg 一一对应进行替换,若没有,则该字符串删除。eg:
select translate(‘abcdefga’, ‘abc’,‘wo’) from dual;
结果为:wodefgw
注意:replace 函数和 translate 函数 MySQL 和 SQL Server 支持 translate 函数。
则按照刚开始的需求,使用这两个函数,则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 函数。
全篇到此结束。