关于oracle中使用nvl函数时,对空字符串的理解
昨天下班之前在程序中遇到了一个使用nvl的sql语句,相信这个函数大家都应该使用过,并且应该是很简单的。
因为之前做的数据库移植时遇到过这个问题,所以今天拿来在这里记载一下。
其中有一段where条件是这样的:
and ((nvl('', ' ') <> ' ' and a.benifitvchno like '%%') or
(nvl('', ' ') = ' ' and a.benifitvchno like '%'))
以上是在plsql中打出的,基本上的意思就是如果a.benifitvchno是空值的话,下面的条件会成立,
如果有值的话上面的语句会成立。实际上在nvl后面的‘’中应该是那个a.benifitvchno的值,因为在这里是空,所以显示为‘’。
这里要着重说明的是oracle对于‘’的处理默认是null的,而‘ ’才是空字符串,(前面是‘’,后面是‘ ’,这里区别是后者中间有空格),所以就是这里是有区别的,因此如果将上面语句写为都是没有空格的‘’,结果肯定是不对的。
补充:今天在csdn上问了下,
可以使用以下语句实验:
(1)
select
1
from
dual
where
nvl(
''
,
''
)
=
''
(2)select
1 from
dual where
nvl('', '') is null
以上两句中第一句不会有值,第二句才会有值。
正像
wh62592855
朋友说的:null=null,返回应该是FALSE。只要记住NULL不等于任何值就是了,也不等于NULL。
特此非常感谢
wildwave,
wh62592855
两位朋友的解答。
相关文档:
Q1.怎样创建表?
Q2.怎样删除表?
Q3.怎样创建视图?
Q4.怎样删除视图?
Q5.怎样给表添加字段?
Q6.怎样删除表中某个字段?
Q7.怎样给某个字段添加约束?
Q8.怎样去除某个字段上的约束?
Q9.怎样给表加上主键?
Q10.怎样删除表的主键?
Q11.怎样给表添加一个外键?
......
记得以前在论坛里看到inthirties用到过WITH AS这个字眼,当时没特别在意。今天在一个帖子里又看到有人用这个,所以就去网上搜了搜相关内容,自己小试了一把,写下来,方便以后忘了的话学习。
===================================================================================
先举个例子吧:
有两张表,分别为A、B ......
要显示1到2行则可以通过
select * from dangan where rownum between 1 and 2
在Oracle
中,要按特定条件查询前N条记录,用个rownum
就搞定了。
select *
from emp where rownum
<= 5
而且书上也告诫,不能对rownum
用">",这也就意味着,如果你想用
select * from emp
where row ......
--行列转换 行转列
DROP TABLE t_change_lc;
CREATE TABLE t_change_lc (card_code VARCHAR2(3), q NUMBER, bal NUMBER);
INSERT INTO t_change_lc
SELECT '001' card_code, ROWNUM q, trunc(dbms_random.VALUE * 100) bal from dual CONNECT BY ROWNUM <= 4
UNION
SELECT '002' card_code, ROWNUM q, trunc(d ......
oracle 存储过程的基本语法 及注意事项
oracle 存储过程的基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
END 存储过程名字
2.SELECT INTO STATEMENT
将selec ......