排序要看用什么字段排序,可以单个字段,也可以多个字段,这些与存在值是否为null无关。
如下列数据
id
name
class
1
a
1
2
b
null
3
c
null
现在要按id和class排序,其中id为主要排序字段,class为次要排序字段
可写如下语句
select from 表名 order by id,class
有以下几个方法,供您参考。
1、对于提交(最后一次 *** 作commit了)的话可以查询那个提交段SELECT
列名1,列名2FROM 表名 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE where VERSIONS_STARTTIME IS NOT null ORDER BY VERSIONS_STARTTIME DESC;查出来的第一条就是最后改变的数据
2、如果表里面有序列或固定的排序字段可按倒排序后取第一条where rownum<2 order by 排序字段 desc
3、还有另外一种办法就是利用ORACLE伪列rowid
select from tbl t1 where t1rowid=(select max(rowid) from tbl t2)
4、在redo log中找到对应相关的表的插入语句,但是这样找到的是sql语句,而不是数据。查redo log得使用log miner工具。
这是几项常用的方法,希望我的回答能给您带来帮助。
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。
测试中文排序的数据库版本
SQL> select from v$version;
BANNER
Oracle Database g Enterprise Edition Release Production
PL/SQL Release Production
CORE Production
TNS for Linux: Version Production
NLSRTL Version Production
创建测试表
create table player (id number( ) name varchar ( ));
检查字符集配置
确认数据库字符集 american_america AL UTF
SQL> select name value$ from props$;
NAME VALUE$
DICT BASE
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE USERS
DEFAULT_EDITION ORA$BASE
Flashback Timestamp TimeZone GMT
TDE_MASTER_KEY_ID
DEFAULT_TBS_TYPE SMALLFILE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS
NLS_CHARACTERSET AL UTF
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD MON RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH MI SSXFF AM
NLS_TIMESTAMP_FORMAT DD MON RR HH MI SSXFF AM
NLS_TIME_TZ_FORMAT HH MI SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD MON RR HH MI SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_P BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL UTF
NLS_RDBMS_VERSION
GLOBAL_DB_NAME ORA G
EXPORT_VIEWS_VERSION
WORKLOAD_CAPTURE_MODE
WORKLOAD_REPLAY_MODE
DBTIMEZONE :
rows selected
SQL>
深入确认字符集
SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET
DECODE(TYPE#
DECODE(CHARSETFORM VARCHAR NVARCHAR UNKOWN )
DECODE(CHARSETFORM VARCHAR NCHAR VARYING UNKOWN )
DECODE(CHARSETFORM CHAR NCHAR UNKOWN )
DECODE(CHARSETFORM CLOB NCLOB UNKOWN )) TYPES_USED_IN
FROM SYS COL$
WHERE CHARSETFORM IN ( )
AND TYPE# IN ( );
确认 *** 作系统字符集设置
[ora g@bj ~]$ export NLS_LANG=american_america al utf
填写测试数据
SQL> insert into player values ( 下午啦 );
row created
SQL> insert into player values ( 八千米死亡线 );
SQL> set pagesize
SQL> select from player;
ID NAME
中文
中文拼音
笔画输入法
一
二
三
四
五
六
七
八
八
九
十
测试啊
下午啦
八千米死亡线
rows selected
SQL>
开始测试 发现三个查询语句返回的结果一致
SQL> select from player order by nlssort(name NLS_SORT=SCHINESE_RADICAL_M );
ID NAME
一
十
四
七
六
五
三
笔画输入法
八
九
八
二
中文
下午啦
中文拼音
测试啊
八千米死亡线
rows selected
SQL> select from player order by nlssort(name NLS_SORT=SCHINESE_STROKE_M );
ID NAME
一
十
四
七
六
五
三
笔画输入法
八
九
八
二
中文
下午啦
中文拼音
测试啊
八千米死亡线
rows selected
SQL> select from player order by nlssort(name NLS_SORT=SCHINESE_PINYIN_M );
ID NAME
一
十
四
七
六
五
三
笔画输入法
八
九
八
二
中文
下午啦
中文拼音
测试啊
八千米死亡线
rows selected
囧 疑似碰上bug 切换到 gR 下看看
SQL> select from v$version;
BANNER
Oracle Database g Enterprise Edition Release Prod
PL/SQL Release Production
CORE Production
TNS for Linux: Version Production
NLSRTL Version Production
SQL> select from player order by nlssort(name NLS_SORT=SCHINESE_PINYIN_M );
ID NAME
八
八
八千米死亡线
笔画输入法
测试啊
二
九
六
七
三
十
四
五
下午啦
一
中文
中文拼音
rows selected
SQL> select from player order by nlssort(name NLS_SORT=SCHINESE_STROKE_M );
ID NAME
一
七
二
九
八
八
八千米死亡线
十
三
下午啦
五
中文
中文拼音
六
四
测试啊
笔画输入法
测试服务器
rows selected
SQL> select from player order by nlssort(name NLS_SORT=SCHINESE_RADICAL_M );
ID NAME
一
七
二
三
下午啦
五
中文
中文拼音
九
八
八
八千米死亡线
六
十
四
测试啊
笔画输入法
测试服务器
rows selected
SQL>
这个结果似乎比较符合预期结果
NLS_SORT=SCHINESE_RADICAL_M 按照部首排序
NLS_SORT=SCHINESE_STROKE_M 按照笔画排序
lishixinzhi/Article/program/Oracle/201311/17664
以上就是关于oracle数据库中多个null值存在时怎样排序全部的内容,包括:oracle数据库中多个null值存在时怎样排序、如何在oracle数据库中查找最后一条插入的数据、Oracle中的中文排序方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)