Oracle中nlssort()函数排序功能说明以及nvl和nvl2函数的区别,以及记录一些oracle常用的函数

Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。

设置NLS_SORT值即可。

 

  1. SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序  
  2. SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序  
  3. SCHINESE_PINYIN_M 按照拼音排序  

 

  1. 拼音 SELECT * FROM 表名 ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M')  
  2. 笔划 SELECT * FROM 表名 ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M')  
  3. 部首 SELECT * FROM 表名 ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M')  

 ALTER SESSION SET NLS_SORT=''; //排序影响整个会话

 

=======================================================oracle中 nvl和nvl2函数的区别

NVL2(expr1,expr2,expr3),NVL2(表达式,不为空设值,为空设值)

NVL( string1, replace_with) ,如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。

oracle函数NVL,NVL2和NULLIF之间的区别和使用

oracle用这么几个函数,可以帮助我们解决数据上null或0的处理

1、NVL()函数

 1.1)介绍:NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回expr1。  注意:两者类型要一致

 1.2)用法:

--expr1为空,返回expr2,结果:'未知'--
select NVL(null,'未知') SexType from dual;
--expr1不为空,返回expr1, 结果:1 --
select NVL('1','2') SexType from dual;

 1.3)实际应用:

如:我们查询表数据出现这种结果,某个字段若为null,返回0

--未加函数时情况 --
select A.UseFlag 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A

若字段不为null,直接返回字段本身

--加函数时情况,要求(field 为null,返回0 ;field 不为null,返回本身) --
select NVL(A.UseFlag,'0') 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A

 

 

2、NVL2 函数

2.1)介绍:NVL2 (expr1, expr2, expr3),若expr1不为NULL,返回expr2 ;为NULL,返回expr3。注意:expr2 和expr3 类型不同的话,expr3 会转换为expr2 的类型

2.2)用法:

  --不为null时,返回expr2 ,结果:1
  select NVL2(0,1,2) from dual;
 --为null时,返回expr3 ,结果:2
 select NVL2(null,1,2) from dual;

2.3)实际应用

将查询结果中字段若为null,返回0

--未加函数时情况 --
select A.UseFlag 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A

若字段不为null,直接返回字段本身

 --应用到实际查询中,要求(field 为null,返回0; field 不为null,返回本身)
 select NVL2(A.UseFlag,A.UseFlag,'0') 使用标志,A.NAME 单据名称 from Dxc_Receive_Notice A

 

3、NULLIF函数

3.1)介绍:NULLIF (expr1, expr2),若expr1和expr2相等,返回NULL;不相等,等返回expr1

3.2)用法:

--相等时,返回结果: null --
 select NULLIF(1,1) from dual;
  --不相等时,返回结果: 1 --
 select NULLIF(1,2) from dual;

 3.3)实际应用

 将查询结果中字段为‘0001/1/1’,返回null

 --未加函数查询结果 要求(将日期类型默认'0001/1/1',改成null,不相等,返回本身日期)---
 select A.RECEIVEDATE 收货日期,A.NAME 单据名称 from Dxc_Receive_Notice A

若字段不为‘‘0001/1/1’,返回字段本身

 --添加函数查询结果,要求(将日期类型默认'0001/1/1',改成null,不相等,返回本身日期)--
  select NULLIF(A.RECEIVEDATE,TO_DATE('0001/1/1','yyyy-mm-dd hh24:mi:ss')) 收货日期,A.NAME 单据名称 from Dxc_Receive_Notice A

 

平时多记记,到用时才能看看,记录你的进步,分享你的成果

参考: https://www.cnblogs.com/xielong/p/9285147.html

 

一些函数:

ORACLE中DECODE的用法

使用结构:


decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

该函数的含义如下:


IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

    1. DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value 等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。初看一下,DECODE 只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使DECODE函数具备大于、小于或等于功能。

       
    2.  

      该函数的含义如下:
      IF 条件=值1 THEN
          RETURN(翻译值1)
      ELSIF 条件=值2 THEN
          RETURN(翻译值2)
          ......
      ELSIF 条件=值n THEN
          RETURN(翻译值n)
      ELSE
          RETURN(缺省值)
      END IF

例如:

select id, username, age, decode(sex,0,'男',1,'女') from users;

 

posted @ 2022-01-28 11:32  Samuel-Leung  阅读(1018)  评论(0编辑  收藏  举报