A. oracle 数据库查询排序问题
有个偷懒的方法
假设每个.分割的数字不超过4位数
写个函数在通过.分割获得数字,然后将所有的数字均补齐为4位,前面加'0'
再排序就正常了
------------------------------------
图片是我做的一个测试表的结果,第一个字段是测试数据
涉及的函数如下:
CREATEORREPLACEFUNCTIONGETNUM(strINVARCHAR2)
RETURNNUMBER
IS
numNUMBER:=0;
pNUMBER;
iNUMBER:=2;
BEGIN
p:=NVL(length(regexp_replace(str,'[^.]','')),0);
WHILEp>1andi<=ploop
BEGIN
num:=num+TO_NUMBER(substr(str,instr(str,'.',1,i-1)+1,instr(str,'.',1,i)-instr(str,'.',1,i-1)-1))*GETBL(i);
i:=i+1;
END;
ENDLOOP;
IFp=0THEN
num:=TO_NUMBER(str);
ELSEIFp=1THEN
num:=TO_NUMBER(substr(str,1,instr(str,'.',1,1)))+TO_NUMBER(substr(str,instr(str,'.',1,1)+1));
ELSE
num:=num+TO_NUMBER(substr(str,1,instr(str,'.',1,1)))+TO_NUMBER(substr(str,instr(str,'.',1,p)+1))*GETBL(p+1);
ENDIF;
ENDIF;
RETURNnum;
END;
-------
CREATEORREPLACEFUNCTIONGETBL(pINNUMBER)
RETURNNUMBER
IS
numNUMBER:=1;
iNUMBER:=1;
BEGIN
WHILEi<pLOOP
BEGIN
num:=num*0.001;
i:=i+1;
END;
ENDLOOP;
RETURNnum;
END;
B. oracle数据库中多个null值存在时怎样排序
排序要看用什么字段排序,可以单个字段,也可以多个字段,这些与存在值是否为null无关。
如下列数据
id
name
class
1
a
1
2
b
null
3
c
null
现在要按id和class排序,其中id为主要排序字段,class为次要排序字段
可写如下语句
select * from 表名 order by id,class
C. oracle数据库中 什么属性 才能排序
1 DBMS string 所使用的数据库管理系统的名字,如Sybase,Oracle,ODBC。
2 Database string 要连接的数据库名字。
3 UserID string 连接数据库所用的用户名。有的DBMS不需要此项。
4 DBPass string 用户连接数据库的口令。
5 Lock string 这是数据库的保护级别,一般不必给出。
6 LogID string 登录到数据库服务器上的用户名,有的DBMS不需要此项,但Sybase和Oracle需要指定这个参数。
7 LogPass string 登录到数据库服务器上的用户口令。这个属性可设可不设,但Sybase和Oracle需要指定口令。
8 ServerName string 数据库服务器名。
9 AutoCommit boolean 指定是否将数据库设置成自动提交所有事务。默认是False,也就是说,必须在应用程序中进行事务管理,并在适当的时候对数据库提交事务。如果选择True,则每个事务都由系统自动提交。
10 DBParm string 用于向数据库传递特殊信息的属性。
11 sqlCode long 指示最近一次SQL操作失败或成功。它的取值为: 返回结果 0 无错误。 -1 出现一个错误。 100 没有检索到数据。
12 SQLNRows long 最近一次SQL操作影响的行数,数据库不同其含义也不同。
13 SQLDBCode long 数据库错误代码。不同的数据库的含义不同。
14 SQLErrText string 相应于SQLDBCode属性中错误码的文字说明。
15 SQLReturnData string 返回DBMS执行SQL的附加信息,不同的DBMS其值不同。
D. oracle怎么把数据库表按照表大小排序
看你怎么理解数据量了,如果是按照表的行数
select table_name,blocks,num_rows
from dba_tables
where owner not like '%SYS%' and table_name not like '%$%'
order by num_rows desc;
如果是按照表占用的数据块排序
select table_name,blocks,blocks
from dba_tables
where owner not like '%SYS%' and table_name not like '%$%'
order by blocks desc;
上面的where条件是为了筛除系统表,不过写的并不详细,你可以根据自己的具体要求改写.
E. 关于Oracle数据库插入数据排序的问题
正常现象。sql中没有使用order by的情况下,查询结果集的返回次序本来就是不受保证的
F. 怎样设计oracle数据库让插入的数据就是按顺序排列的
按照什么顺序?
普通的表不成,有一种表叫做索引组织表,索引和数据放在一起的。这种表可以实现你想要的功能。
G. oracle数据库怎么同时进行两次排序
order by 字段A , 字段B
现根据A排序,再根据B排序
H. oracle数据库中怎样依据成绩实现排名
首先,来构造一些数据
drop table test;
create table test
(
name varchar2(10),
account number(5)
);
insert into test values ('张三','5');
insert into test values ('王五','10');
insert into test values ('小二','10');
insert into test values ('李四','20');
insert into test values ('小三','40');
insert into test values ('小四','50');
insert into test values ('小五','90');
insert into test values ('小六','90');
insert into test values ('小七','90');
commit;
下面来看一下一些方式的排名结果:
1. select t.*,dense_rank() over(order by t.account asc) 排名 from test t;
I. oracle怎么把数据库表按照表大小排序
看你怎么理解数据量了,如果是按照表的行数
select
table_name,blocks,num_rows
from
dba_tables
where
owner
not
like
'%SYS%'
and
table_name
not
like
'%$%'
order
by
num_rows
desc;
如果是按照表占用的数据块排序
select
table_name,blocks,blocks
from
dba_tables
where
owner
not
like
'%SYS%'
and
table_name
not
like
'%$%'
order
by
blocks
desc;
上面的where条件是为了筛除系统表,不过写的并不详细,你可以根据自己的具体要求改写.
J. oracle数据库单表查询并且按照主键ID排序
id用1,2,3,4,5.....纯数字的,你怎么会把它定义为varchar类型?
解决步骤:
(1)新建一个表A,表结构和ib_sql 一样,但把id定义为NUMBER类型。
(2)把ib_sql 中的所有数据插入到A中:INSERT INTO A SELECT * FROM ib_sql ;
(3)DROP TABLE ib_sql;
(4)把表A改名为ib_sql: ALTER TABLE A RENAME TO ib_sql;
(5)再执行你上面的语句就可以实现排序