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'。