decode函数能够实现逻辑的if……else选择判断,但是只能进行等值判断,就像switch……case。
基本语法格式如下:DECODE(col/expression , search1 , result1
[ , search2 , result2 ……]
[ , default] )
使用例子如:
SQL> select decode(empno,7839,'国王',7698,'大臣','公民') king from emp;
KING
----
公民
公民
公民
公民
公民
大臣
公民
公民
国王
公民
公民
又如:
SQL> select decode(length('C20090102'),8,20090102 ,'20090102') resul from dual;
RESUL
----------
20090102
但使用中要特别注意下面的问题:
--报错:无效数字
select decode(length('C20090102'),8,20090102 ,'c20090102') from dual;
--没问题
select decode(length('C20090102'),8,20090102 ,'20090102') from dual;
--没有问题
select decode(empno,7839,'国王','不是国王') from emp;
--报错:无效数字。因为‘不是国王’不能转换为数字(7839)类型
select decode(empno,7839,7839,'不是国王') from emp;
--没有问题。因为‘asdf’和‘2000’的数据类型一样。
select decode(length(empno),7839,'2000','asdf') from emp;
上面报错的原因是因为:result2……default,也就是后面的输出的数据类型一定要和result1的数据类
我在把oracle数据导入sqlserver中时,发现在oracle中字段定义为唯一索引时,不同记录的此字段如果为空不被认为是重复的,但在sqlserver中如果此字段为唯一索引字段,不允许有2个以上的空值。郁闷。所以只好将sqlserver中的唯一索引字段手工修改为几个非空的值,但这样程序肯定要进行修改了。需要在程序中为此字段设置不重复 ......