oracle select 语句的select语句中可以判断查询么

博客访问: 212631
博文数量: 50
博客积分: 1141
博客等级: 少尉
技术积分: 965
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Oracle
&Oracle 10g数据库基础之基本查询语句-中-函数--资料参考:张烈&张建中《数据库管理员培训讲义》函数:使用函数的目的是为了操作数据将输入的变量处理,返回一个结果。变量可以有好多。传入的变量可以是列的值,也可以是表达式。函数可以嵌套。内层函数的结果是外层函数的变量。单行函数:每一行都有一个返回值,但可以有多个变量。多行函数:多行有一个返回值。单行函数的分类:字符操作函数数字操作函数日期操作函数数据类型转换函数综合数据类型函数字符操作函数:大小写操作函数Lower,upper,initcap&&&小写大写首字母大写字符串操作函数Concat,length,substr,instr,trim,replace,lpad,rpad实验12:操作字符串的函数字符操作函数:大小写操作函数Lower,upper,initcap&&&小写大写首字母大写字符串操作函数Concat,length,substr,instr,trim,replace,lpad,rpad该实验的目的是掌握常用的字符串操作的函数.字符串的大小写操作SQL> Select lower(ename),upper(ename),initcap(ename)SQL>Select lower(ename)&小写字母,upper(ename)&大写字母,initcap(ename)&首字母大写&SQL> select lower(' mf TR')&小写字母, upper('mf TR')&大写字母, initcap('mf TR')&首字母大写Dual是虚表,让我们用表的形式来访问函数的值。字符串操作函数Concat,length,substr,instr,trim,replace,lpad,rpad其它字符串操作函数concat将两个字符连接到一起select ename,job,concat(ename,job)求字符串的长度下面三句话是求字符串的长度,字符串要单引。select length('张三')--按照字select lengthb('张三')--按字节select lengthc('张三')--unicode的长度substr截取字符串substr(字符串,m,n),m是从第几个字符开始,如果为负的意思是从后边的第几个开始。N是数多少个,如果不说就是一直到字符串的结尾SQL> select ename,substr(ename,1,1) "第一个字母",substr(ename,-2) "最后两个字母"求子串在父串中的位置,0表示没有在父串中找到该子串。SQL> select ename,instr(ename,'A') "A在第几位"trim截断字符串和添加字符串的函数Trim函数是截掉头或者尾连续的字符,一般我们的用途是去掉空格。SQL> select trim(leading 'a' from 'aaabababaaa')截掉连续的前置的aSQL> select trim(trailing 'a' from 'aaabababaaa')截掉连续的后置的aSQL> select trim(both 'a' from 'aaabababaaa')截掉连续的前置和后置的aSQL> select trim('a' from 'aaabababaaa')如果不说明是前置还是后置就是both全截断。Lpad和rpad字符填充SQL> select lpad(ename,20,'*') ename,rpad(ename,20,'。')左填充和右填充,20是总共填充到多少位,*和。是要填充的字符串。Lpad左填充,rpad右填充,一般的用途是美化输出的结果。如果位数不足,按照截取后的结果显示,不报错。select lpad(sal,18,'*')左填充18位星号,rpad(sal,25,'。')右填充25位句号,select lpad(sal,30,' ')左填充30位空格,rpad(sal,30,' ')右填充30位空格,REPLACE替换字符SQL> SELECT REPLACE('JACK and JUE','J','xj_') FROM DUAL;将字符串中的J全部替换位xj_实验13:操作数字的函数该实验的目的是掌握常用的关于数字操作的函数. ROUND,TRUNC数字操作函数以小数点位核心,2是小数点后两位,0可以不写,表示取整,-1表示小数点前一位ROUND是四舍五入:SQL> SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL;TRUNC是截断,全部舍弃:SQL> SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2) FROM DUAL;ceil取整,上进位,和trunc全部去掉正好相反SQL> select ceil(45.001)取绝对值SQL> select abs(-23.00)取余数SQL> select mod(8.88,2)实验14:操作日期的函数该实验的目的是掌握常用的关于日期操作的函数.系统日期的操作日期是很特殊的数据类型,用好了可以提高数据库的性能,而使用不当往往是错误的根源,如果你使用字符型数据来存储日期,就放弃日期特有的计算功能。函数SYSDATE求当前数据库的时间。SQL> sele日期的显示格式和客户端的配置相关。查看当前的日期显示格式SQL> select * from nls_session_parameterswhere parameter='NLS_DATE_FORMAT';col value for a20代表的含义是凡是列的名称是value的,都按照20个宽度来显示,你想取消该列的定义col value clear,其中col是column的缩写。你想查看帮助help column即可alter session set NLS_DATE_FORMAT='yyyy/mm/dd:hh24:mi:ss';重新设定为我们想要的格式。seleSYSDATE-------------------07/05/01:16:32:54查看系统时间,数据库本身没有时间,它有scn号,和我们的时间不同。alter session set NLS_DATE_FORMAT='DD-MON-RR';设定为默认的显示格式sele再次查看,我们发现日期的显示随着客户端的格式变化而变化。日期的内部存储都是以yyyymmddhh24miss存在数据库中日期的操作函数SQL> select round(sysdate-hiredate) days,sysdate,两个日期相减的结果单位为天,往往是带小数点。我们通过函数可以取整。取两个日期的月间隔SQL> select months_between(sysdate,hiredate) 两个日期的月间隔,sysdate,六个月过后是哪天?SQL> select sysdate&今天, add_months(sysdate,6)&六个月后&SQL> select next_day(hiredate,5) ,当前的日期算起,下一个星期五是哪一天,这句话你可能运行失败,因为日期和客户端的字符集设置有关系,如果你是英文的客户端,就的用Friday来表达,日期是格式和字符集敏感的。如果你是中文的客户端,就的用‘星期五’来表达。该日期的月底是哪一天。日期的进位和截取select hiredate,round(hiredate,'mm') ,round(hiredate,'month')select hiredate,round(hiredate,'yyyy') ,round(hiredate,'year')select hiredate,trunc(hiredate,'mm') ,trunc(hiredate,'month')select hiredate,trunc(hiredate,'yyyy') ,trunc(hiredate,'year')数字的进位和截取是以小数点为中心,我们取小数点前或后的值,而日期的进位和截取是以年,月,日,时,分,秒为中心。数据类型的隐式转换字符串可以转化为数字和日期。数字要合法,日期要格式匹配。select ename,empno from emp where empno='7900';数字和日期在赋值的时候也可以转为字符串,但在表达式的时候不可以转换。select ename,empno from emp where ename='123';select ename,empno from emp where ename=123;数据类型的显式转换To_char,to_date,to_number日期转化为字符串,请说明字符串的格式。SQL> select ename,to_char(hiredate,'yyyy/mm/dd')FM消除前置的零和空格。SQL> select ename,to_char(hiredate,'fmyyyy/mm/dd')其他格式:year,month,mon,day,dy,am,ddsp,ddspth格式内加入字符串请双引。SQL> select to_char(hiredate,'fmyyyy "年" mm "月" dd "日"')当前距离零点的秒数.select sysdate,to_char(sysdate,'sssss')数据类型的显式转换数字转为字符串格式为9,0,$,l,.col salary for a30SQL> select ename,to_char(sal,'')SQL> select ename,to_char(sal,'$.00' )SQL> select ename,to_char(sal,'l99,999.000')SQL> select ename,TO_char(sal,'9G999D99')9是代表有多少宽度,如果不足会显示成######,0代表强制显示0,但不会改变你的结果。G是千分符,D是小数点。在数据库中16进制的表达是按照字符串来描述的,所以你想将十进制的数转换为十六进制的数使用to_char函数。SQL> select to_char(321,'xxxxx')其中xxxxx的位数要足够,不然报错,你就多写几个,足够大就可以。数据类型的显式转换 To_number,to_date如果你想将十六进制的数转换为十进制的数请使用to_number函数。SQL> select to_number('abc32','xxxxxxxx')日期是格式和语言敏感的,切记!SQL> select TO_NUMBER('100.00', '9G999D99')G为千分符,D为小数点RR和yy日期数据类型select to_char(sysdate,'yyyy') "当前",to_char(to_date('98','yy'),'yyyy') "yy98",to_char(to_date('08','yy'),'yyyy') "yy08",to_char(to_date('98','rr'),'yyyy') "rr98",to_char(to_date('08','rr'),'yyyy') "rr08"结果为yy是两位来表示年,世纪永远和说话者的当前世纪相同。RR比较灵活,它将世纪分为上半世纪和下半世纪。如果你处于上半世纪,描述的是0-49,那么就和当前世纪相同,描述的是50-99就是上世纪。如果你处于下半世纪,描述的是0-49,那么是下个世纪,描述的是50-99就是当前世纪。从而可以看出,RR的设计完全为了1990年到2010之间我们的思维习惯而设计的。当我们时间到2050前后,使用起来就非常的别扭。实验15:操作数据为null的函数该实验的目的是掌握常用的关于NULL值操作的函数.综合数据类型函数NVL (expr1, expr2)如果expr1为非空,就返回expr1,&如果expr1为空返回expr2,两个表达式的数据类型一定要相同。NVL2 (expr1, expr2, expr3)如果expr1为非空,就返回expr2,&如果expr1为空返回expr3NULLIF (expr1, expr2)如果expr1和&expr2相同就返回空,否则返回expr1COALESCE (expr1, expr2, ..., exprn)返回括号内第一个非空的值。SQL> select ename,comm,nvl(comm,0)有奖金就返回奖金,奖金为空就返回0。select ename&姓名,sal&工资,comm&奖金,sal+nvl(comm,0)&总工资,nvl2(comm,'工资加奖金','纯工资') "收入类别"有奖金就返回‘工资加奖金‘,奖金为空就返回‘纯工资’。SQL> select ename,nullif(ename,'KING')如果员工的名称为king就返回空,否则返回自己的名字。SQL> select ename&姓名,COALESCE(comm,0) "奖金"如果有奖金就返回奖金,如果没有奖金就返回0,起个别名叫做"奖金"。实验16:分支的函数该实验的目的是掌握分支操作的函数.&Case语句9I以后才支持的新特性,说叫语句其实是函数。目的是为了分支。CASE expr WHEN comparison_expr1 THEN return_expr1[WHEN comparison_expr2 THEN return_expr2WHEN comparison_exprn THEN return_exprnELSE else_expr]END例子:例题:判别job,不同工作的人赋予不同的工资,除了CLERK,SALESMAN,ANALYST以外,其它的人工资不变,将函数的值起一个别名为"处理后数据"。语句:SELECT ename, job, sal,CASE job WHEN 'CLERK' THEN 1.1111*salWHEN 'SALESMAN' THEN 2.2222*salWHEN 'ANALYST' THEN 3.3333*salELSE sal END "处理后数据"FROMDecode函数:和CASE语句一样都是分支语句,但Decode函数是ORACLE自己定义的,其它数据库可能不支持。语法如下:DECODE(col|expression, search1, result1[, search2, result2,...,][, default])例题:判别job,不同工作的人赋予不同的工资,除了CLERK,SALESMAN,ANALYST以外,其它的人工资不变,将函数的值起一个别名为"处理后数据"。语句:SELECT ename, job, sal,decode(job ,'CLERK' , 1.11*sal,'SALESMAN' , 3.33*sal,'ANALYST' , 8.88*sal, sal ) "处理后数据"FROM下面的例题是求税率:不同工资上的税率不同。每2000一个台阶,8000以上一律40%的税。SQL>SELECT ename, sal,DECODE (TRUNC(sal/1000, 0),0, 0.00,1, 0.09,2, 0.20,3, 0.30, 0.40)&税率FROM不管CASE语句还是DECODE函数,他们都是单行函数,每一行都有一个返回值。从ORACLE角度来讲,DECODE更好,因为各个版本的数据库都支持,横向来说,CASE语句更好,因为它是国标,不同的数据库间都认可。实验17:分组统计函数该实验的目的是掌握常用的组函数.理解group by的操作.需要掌握的知识点:1。组函数2。分组统计3。NULL值在组函数中的作用4。HAVING的过滤作用5。组函数的嵌套&组函数这种函数每次处理多行,给出一个返回值Avg平均Sum求和Max最大Min最小Count计数所有组函数,除了count(*)以外,都忽略null值,count是计数,查看有多少行,count(列)是查看该列有多少非空的行。例子:Group by&子句Having是在结果中再次筛选。Having一定得出现在group by&子句得后面。不能独立存在。组函数的嵌套注意要使用GROUP BY子句。巧用DECODE函数,改变排版方式SQL>select sum(decode(to_char(hiredate,'yyyy'),')) "1980",sum(decode(to_char(hiredate,'yyyy'),')) "1981",sum(decode(to_char(hiredate,'yyyy'),')) "1982",sum(decode(to_char(hiredate,'yyyy'),')) "1987",count(ename) "总人数"《完》--xjzhujunjie--
阅读(698) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。问题补充&&
本页链接:
这个专业术语叫Oracle Hints。用来告诉优化器按照指定方式生成执行计划。像你问题中的方式,表示强制使用索引,而不是全表扫描
湛蓝水晶 &
•••••••••••
这是oracle中的高级用法,/*+ index(t1) */ 表示,在执行查询时,强制使用t1表中的t1索引
kongxianji537&
猜你感兴趣--查看当前库中的所有表select * from all_tables a where a.table_name='INFOCODE_P20081'--查看表结构select * from all_tab_columns where table_name='INFOCODE_P20081'--查看触发器、过程、函数select * from user_select COUNT(*) from user_source WHERE TYPE='PROCEDURE';select * from user_--获取有哪些用户在使用数据库select username from v$--怎样查得数据库的SIDselect name from v$--如何在Oracle服务器上通过SQLPLUS查看本机IP地址 ?select sys_context('userenv','ip_address')--数据库有多少个tablespaceselect * from dba_--如何查有多少个数据库实例?SELECT * FROM V$INSTANCE;--查询当前用户对像?SELECT * FROM USER_OBJECTS;SELECT * FROM DBA_SEGMENTS;--如何知道用户拥有的权限?SELECT * FROM dba_sys_--查询表空间信息?SELECT * FROM DBA_DATA_FILES;----------------------------------------------------------------------------------------------------------------------查询被锁表的方法:SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(REQUEST)) MODE_REQUESTED, O.OWNER||'.'||O.OBJECT_NAME||' ('||O.OBJECT_TYPE||')',S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;--如何解锁ALTER SYSTEM KILL SESSION 'SID,SERIR#';--如何获取链接状况SELECT * FROM DBA_DB_LINKS;--给表、列加注释comment on table 表 is '表注释';comment on column 表.列 is '列注释';select * from user_tab_comments where --在ORACLE中取毫秒select sy--如何在字符串里加回车select 'Welcome to visit'||chr(10)||'www.CSDN.net'--如何将小表放入keep池中alter table xxx storage(buffer_pool keep);--如何查看现有回滚段及其状态--col segment format a30SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROMDBA_ROLLBACK_SEGS--ORACLE产生随机函数select DBMS_RANDOM.RANDOM from dual--第一个是查字段注释select * from&& user_col_comments where table_name='表名(大写)';--第二个是查表的注释select * from USER_TAB_COMMENTS where table_name='表名(大写)';
阅读(...) 评论()博客分类:
Oracle 中的条件查询语句及函数(实例说明)
Oracle 中的函数
Sql--plus函数:
字符串函数是oracle使用最广泛的一种函数.
? LOWER:小写
? UPPER:大写
? INITCAP:首字母大写
? CONCAT:连接
? SUBSTR:截取
(参数,开始,数目)
? LENGTH:返回字符串的长度
? INSTR:(参数,字母) 返回字母出现的位置
? LPAD:(参数,长度,在前补齐参数字母)
? |RPAD:(参数,长度,在后补齐参数字母)
? REPLACE:(参数,参数[,参数]):第一个参数操作数,第二是要查找的字符,第三个是替换的字符,如果没有第三个就删除查找的字符。
//查询名称为的员工信息 (不区分大小写)
SQL& select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp
where lower(ename)='scott';
SQL& select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp
where upper(ename)='SCOTT';
//查询员工信息 把员工名称与工作连接在一起
SQL& select empno,concat(ename,job),mgr,hiredate,sal,comm,
//查询员工信息 把员工名称与工作连接在一起
SQL& select empno,concat(ename||'is work:',job),mgr,hiredate,sal,comm,
//查询员工名称中含有字符的位置
SQL& select empno,instr(ename,'O'),job,mgr,hiredate,sal,comm,
//查询员工名称中含有字符的位置并且求出了员工名称字符长度
SQL& select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,
//在查询上面结果中过滤出员工工作从第三字母开始为员工信息
SQL& select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3)='ERK';
备注:当含有两个参数的时候,从开始位置直接到参数结束的结束为止
//在效果同上的同时指明了截取个数为
SQL& select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3,3)='ERK';
//查询员工信息
薪资是位位数不够在左部分补填充
SQL& select empno,ename,job,mgr,hiredate,LPAD(sal,10,'*'),comm,
//查询员工信息
薪资是位位数不够在右部分补填充
SQL& select empno,ename,job,mgr,hiredate,RPAD(sal,10,'*'),comm,
//查询员工信息
把员工名称中含有字符去除掉
SQL& select empno,TRIM('S' from ename),job,mgr,hiredate,10,comm,
SQL& select empno,TRIM( both 'S' from ename),job,mgr,hiredate,10,comm,
//查询员工信息
把员工名称中前面有字符去除掉
SQL& select empno,TRIM( Leading 'S' from ename),job,mgr,hiredate,10,comm,
SQL& select empno,LTRIM( ename,'S'),job,mgr,hiredate,10,comm,
//查询员工信息
把员工名称中后面有字符去除掉
SQL& select empno,TRIM( trailing 'S' from ename),job,mgr,hiredate,10,comm,
SQL& select empno,RTRIM( ename,'S'),job,mgr,hiredate,10,comm,
数字函数:
? ROUND: 四舍五入
ROUND(45.926, 2) 45.93
TRUNC(45.926, 2) 45.92
? MOD: 求余
? ABS:绝对值
? CEIL:返回大于或等于value的最小整数
? FLOOR:返回小于或等于value的最大整数
? SQRT :返回value的平方根 负数无意义。
//四舍五入 结果为
SQL& select round(45.56)
//绝对值 结果为
SQL& select abs(-45.56)
//大于等于最小整数 结果为
SQL& select ceil(-45.56)
//小于等于最大整数 结果为
SQL& select floor(-45.56)
//求余数 结果为
SQL& select mod() from dual
//截取的数的操作数是正数的情况下:只操作小数位
SQL& select trunc(,2)
//截取的数的操作数是负数的情况下:操作的是小数点之前的位把操作位小数点之前的位数全部改写成结果就是
SQL& select trunc(,-3)
日期时间函数
? Oracle 中的日期型数据实际含有两个值: 日期和时间。默认的日期格式是 DD-MON-RR.日期时间函数用来返回当前系统的日期和时间、以及对日期和时间类型的数据进行处理运算。
? add_months(date,count);在指定的日期上增加count个月
? last_day(date);返回日期date所在月的最后一天
? months_between(date1,dates);返回date1到date2之间间隔多少个月
? new_time(date,this’,’other’);将时间date从this时区转换成other时区
? next_day(day,’day’);返回指定日期或最后一的第一个星期几的日期,这里day为星期几
? sysdate();获取系统的当前日期
? current_timestamp();获取当前的时间和日期值
? round:日期的四舍五入
? trunc 日期的截取
日期的数学运算:
l 在日期上加上或减去一个数字结果仍为日期。
l 两个日期相减返回日期之间相差的天数。
l 可以用数字除24来向日期中加上或减去小时。
//获取系统的当前时间 显示的格式采用默认格式 显示结果:07-4月 -11 11.15.38.390000 上午 +08:00
SQL& select current_
//获取系统的当前日期值
显示结果: 11
//为当前日期加上个月 显示的结果:2011-7-7 11:18:36
select add_months(sysdate,3)
//返回当前月的最后一天 显示的结果: 11:19:4
select last_day(sysdate)
//返回两个日期之间的间隔月是几: 结果为:
SQL& select months_between(add_months(sysdate,4),sysdate)
//从时区转换成时区的日期结果
SQL& select new_time(sysdate,'GMT','AST')
//返回下一个星期一的日期值
必须写成星期几
SQL& select next_day(sysdate,'星期一')
转换函数:
隐式转换:在运算过程中由系统自动完成的
显式转换:在运算过程中需要调用相应的转换函数实现。
隐式转换:是oracle自己装换的形式,在这里不做研究
to_char(date,’format’):按照指定的格式format把数字或日期类型的数据转换成字符串
必须包含在单引号中而且大小写敏感。
可以包含任意的有效的日期格式。
日期之间用逗号隔开。
//把当前日期转换成的格式
SQL& select to_char(current_timestamp,'YYYY/MM/DD')
//把当前日期转换成YYYY/MM/DD HH24/MI/SS AM的格式
SQL& select to_char(current_timestamp,'YYYY/MM/DD HH24/MI/SS AM')
//DD “of” MONTH
SQL& select to_char(current_timestamp,'YYYY DD "of" MONTH
HH/MI/SS AM')
//把当数字按照这种方式返回字符串
并且操作数的位数不能够大于即后边的位数位否则话结果会是
SQL& select to_char(11111,'$99,999')
to_number(char);把包含了数字格式的字符串转换成数字数据
to_date(string,’format’);按照指定格式的format把字符串转换成日期数据,如果省略了foramt格式,那么就采用默认的日期格式(DD-MON-YY);
//把当前字符串转换成日期
SQL& select to_date('','YYYY-MM-DD')
//求出两个日期之间相差的天数
SQL& select to_date('','YYYY-MM-DD')-to_date('','YYYY-MM-DD')
//求出两个日期之间相差的周次
SQL& select (to_date('','YYYY-MM-DD')-to_date('','YYYY-MM-DD'))/7
//对周次进行向上取整
SQL& select ceil((to_date('','YYYY-MM-DD')-to_date('','YYYY-MM-DD'))/7)
chartorowid(char);把字符串转换成rowid类型
rowidtochar(x);把rowid类型转换成字符类型数据
这些函数适用于任何数据类型,同时也适用于空值:
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)
将空值转换成一个已知的值: fon
javawangli
浏览: 151602 次
来自: 北京
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
这个只能正对数据量少的批量打印,当你打印10000张数据的时候 ...
官网的文档明确说明 是五种 你的默认和no应该是同一种
图片上传的东西呢?
地址不对了
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'查看: 5184|回复: 4
oracle中,select语句中判断后赋值问题
论坛徽章:0
select语句中,判断后赋值,类似java中三目运算符,代码如下,请问有何问题?
select sum(apply_number) from t_allot_apply_main m inner join t_allot_apply_detail d on m.id=d.allot_apply_main_id
where m.business_type=decode(m.allot_dir&&'2','5','4') and m.audit_passed&&'5';
论坛徽章:1088
decode(m.allot_dir&&'2','5','4')
没有这语法啊,应该是case when m.allot_dir&&'2' then '5' else '4' end
论坛徽章:115
贴一下表结构之类的,建表语句,这样别人能很快帮你调试
论坛徽章:0
谢谢,已经解决了!
论坛徽章:2
一 你的语句能执行成功吗?decode函数应该没有这种用法,用case when 语句代替比较好
二 把where 条件中的两个条件的顺序倒换下,能提高语句的执行效率,这和oracle的执行顺序有关。
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号

我要回帖

更多关于 oracle select 判断 的文章

 

随机推荐