添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

思路一:将字母转成ASCII码值进行排序

(最开始想到的这个思路,但该方法待优化!!!)

ORDER BY CASE WHEN ASCII(字段) < 58 THEN TO_NUMBER(字段) ELSE ASCII(字段) END
  • [0-9]的ASCII码值为[48-57]
  • [A-Z]的ASCII码值为[65-90]
  • [a-z]的ASCII码值为[97-122]

这里直接判断小于58就认为是数字,数字时取数值,数字大于65时就会和字母冲突,当前业务中数字最大为20(无小写字母),暂且可以满足需求(有小写时小写也会排在大写的后面)

思路二:是数字时就转化为数值排序,再根据字母排序

(推荐使用该方法!!!)

order by to_number(regexp_substr(字段, '^\d+', 1)), 字段

注:排序字段有两个,数字时根据数值排序,不是数字时再根据原字符排序

需求:对如下数据排序:思路一:将字母转成ASCII码值进行排序(最开始想到的这个思路,但该方法待优化!!!)ORDER BY CASE WHEN ASCII(字段) &lt; 58 THEN TO_NUMBER(字段) ELSE ASCII(字段) END[0-9]的ASCII码值为[48-57][A-Z]的ASCII码值为[65-90][a-z]的ASCII码值为[97-122]这里直接判断小于58就认为是数字,数字时取数值,数字大于65时就会和字母冲突,当前业务中数字最大为20(无
Oracle字母+数字字段按照字母排序 这是普通按照order by语句的结果 select dabm,damc,dabm bm from uf_bzjlb order by bm 想要变成A1,A2,A3… select dabm,damc,dabm bm from uf_bzjlb order by regexp_substr(bm, ‘^\D*’) nulls first,to_number(regexp_substr(bm, ‘\d+’)) 修改完执行结果是 大功告成!!!!
1.背景,处理汽车厂商配件图号信息,里面的图中编号数据出现了字母数字数字,小数点,数字加符号加数字的数据。 厂商要求排序能兼顾这几种场景: 一,厂商A的配件信息中图中编号(字母数字组合)。 ----------------------------------------------------------
在我们平常的开发中可能会遇到这样的问题,就是判断某一列是否全部由数字组成,我们都知道oracle并没有给我们提供这样一个现成的函数,那么根据我的经验我总结了两个行之有效的方法(列名:column,表名:table): 1.使用trim+translate函数: 代码如下:select * from table where trim(translate(column,’0123456789′,’ ‘)) is NULL;   这里要注意的是:translate函数的第三个参数是一个空格,不是”, 因为translate的第三个参数如果为空的话,那么永远返回”,这样的就不能达到过滤纯数字的目的。
Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。   1、设置NLS_SORT参数值    SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序   SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序   SCHINESE_PINYIN_M 按照拼音排序    2、Session级别的设置,修改ORACLE字段的默认排序方式:   按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;   按笔画:alter session s
1)按笔画排序 select * from Table order by nlssort(columnName,’NLS_SORT=SCHINESE_STROKE_M’) 2)按部首排序 select * from Table order by nlssort(columnName,’NLS_SORT=SCHINESE_RADICAL_M’) 3)按拼音排序 select * from Table order by nlssort(columnName,’NLS_SORT=SCHINESE_PINYIN_M’); 您可能感兴趣的文章:Oracle
这是存入数据库的数据 String [] str = new String[]{"info1","info10","info2","info3","info4","info5-5","info6-4","info7-4"}; 这是SQL语句 select * from talbe order by to_number(translate(排序字段, '0123456789' ||...
如果你想根据数字区间递增循环多条记录,可以使用 Oracle 中的 CONNECT BY LEVEL 语句。以下是一个示例: 假设你有一个表名为 my_table,其中有两个字段 id 和 name,你想往这个表中插入 10 条记录,id 字段的值从 1 到 10 递增,name 字段的值为 'name' + id。 你可以使用以下 SQL 语句: INSERT INTO my_table (id, name) SELECT level, 'name' || level FROM dual CONNECT BY LEVEL <= 10; 这个语句中,CONNECT BY LEVEL <= 10 表示循环 10 次,level 是一个伪列,表示循环次数。SELECT 语句中使用了这个伪列来生成 id 和 name 字段的值。 执行这个语句后,my_table 中就会插入 10 条记录,id 字段从 1 到 10 递增,name 字段的值为 'name1' 到 'name10'。