oracle的学习和记录

Oracle语法learn

NVL函数

空值判断函数

  1. NVL(表达式A,表达式B)

    如果表达式A为空值,NVL返回值为表达式B的值,否则返回表达式A的值。该函数的目的是把一个空值(null)转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型。但是表达式A和表达式B的数据类型必须为一个类型。

    例:nvl(clue_num,0):如果clue_num为空,则返回0;否则返回clue_num的值

  2. NVL2(表达式A,表达式B,表达式C)

    如果表达式A为空,则返回表达式C的值;如果表达式A不为空,则返回表达式B的值。

    例:nvl(sex,0,1):如果sex为空,则返回1;否则返回0

NULLIF函数

  1. NULLIF:如果exp1和exp2相等则返回空(NULL),否则返回第一个值

    例如:下面返回一个空值

    select NULLIF('111','111') from dual
    

    又例如:下面返回111

    select NULLIF('111','1111') from dual
    

    而且两个值的数据类型要一致,不然会报错

Coalesce函数

  1. Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项

    例:Coalesce(expr1, expr2, expr3…… exprn)

    表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。
    返回表达式中第一个非空表达式,如有以下语句:

    SELECT COALESCE(NULL,NULL,3,4,5) FROM dual   其返回结果为:3
    如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。

!=与<>和^=

!= 、 <>、^= 三个符号都表示“不等于”的意思,在逻辑上没有本质区别

但是要主义的是三个符号在表达“不等于”含义的同时,隐含一个“不为空 is not null”的前提,所以使用时null会被过滤掉。

例如数据库三条数据

姓名性别
张三
李四
王五

姓名<> ‘张三’ :可以查出来李四和王五
性别<> ‘男’ :仅可以查出来王五,李四的性别null被默认过滤掉了

但是官方更推荐“<>”的写法,因为跨平台可移植性更强

insert语句批量插入数据

insert all
into a(field_1,field_2) values (value_1,value_2)
into a(field_1,field_2) values (value_3,value_4)
into a(field_1,field_2) values (value_5,value_6)
select 1 from dual;

insert all into并不表示一个表中插入多条记录,而是表示多表插入各一条记录,而这多表可以是同一个表,就成了单表插入多条记录。根据后面子查询的结果,前面每条into语句执行一次,博客正文中value都是“字面量”,所以用select 1 from dual返回一条记录即可。

in/not in 的作用

  1. in 常用于条件表达式(where)中,它的作用是对某个范围内的数据进行操作,查询或删除。字段值只要满足这个范围之内的任意一个即可

    select * from TableName(表名) where 字段 in (value1,value2,…);
    
  2. not in 作用是查询不在某个范围内的数据,字段值同时不满这个范围的所有值。

    select * from TableName(表名) where 字段 not in (value1,value2,…);
    

插入系统当前时间

insert into TableName (时间字段名) values (sysdate)

修改表中字段长度

alter table TableName(表名) modify 字段  varchar2(1500);

Oracle数据库汉字占几个字节

  1. ORACLE数据库它可以存储字节或字符,例如 CHAR(12 BYTE) CHAR(12 CHAR)的意义是不同的.一般来说默认是存储字节,你可以查看数据库参数NLS_LENGTH_SEMANTICS的值
SELECT * FROM v$nls_parameters WHERE PARAMETER='NLS_LENGTH_SEMANTICS';
--结果为BYTE,说明存储是字节类型
  1. 如果定义为VARCHAR2(50 CHAR),那么该列最多就可以存储50个汉字,如果定义字段为VARCHAR2(50) 或VARCHAR2(50 BYTE)那么它最多可以存储多少个汉字就要视数据库字符集编码决定。
  2. ORACLE数据库汉字占用几个字节,要根据ORACLE中字符集编码决定,一般情况下,数据库的NLS_CHARACTERSET 为AL32UTF8或UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节.
SELECT * FROM v$nls_parameters WHERE PARAMETER='NLS_CHARACTERSET';
  1. 至于具体情况,可以通过LENGTHB或者VSIZE函数求得是占用字节数。LENGTH函数求得是占用字符数,LENGTHB或者VSIZE函数求得是占用字节数。
select  lengthb('中国') from dual;
select  length('中国') from dual;

LENGTH是计算字符的个数,输入的参数先被转为字符类型计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值