重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用case和正则表达式可以处理,不知道列1的值为3时怎么处理,所以我没处理,你可以自己修改。
创新互联建站是一家专业提供新密企业网站建设,专注与成都网站设计、网站建设、H5响应式网站、小程序制作等业务。10年已为新密众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
with t as
( select 1 col1, 'a,d' col2 from dual
union all
select 1, null from dual
union all
select 2, 'b,c' from dual
union all
select 2, 'b,c' from dual
union all
select 2, null from dual
union all
select 3, 'a,c' from dual
)
select col1, case when col1 = 1
then case when col2 is null then 'a'
when col2 is not null then regexp_substr(col2,'([a-b])')
else col2 end
when col1 = 2
then case when col2 is null then 'b'
when col2 is not null then regexp_substr(col2,'([c-d])')
else col2 end
else col2 end
from t;
一个多条件判断的sql:
select
oper.opid,
oper.user_name,
oper.user_host,
case
when oper.oper_type = 1 then 'System Manager'
when oper.oper_type = 2 then 'USER Manager'
end case,
case
when oper.oper_object_type = 1 then 'User'
when oper.oper_object_type = 2 then 'Role'
when oper.oper_object_type = 3 then 'Broker'
when oper.oper_object_type = 4 then 'QM Manager'
when oper.oper_object_type = 5 then 'User Group'
when oper.oper_object_type = 6 then 'Msg Flow'
when oper.oper_object_type = 7 then 'Queue'
end case
from esb_log_user_oper oper;
1、先创建一个简单的数据表。
2、插入数据,顺便复习插入数据了,最好多插几个,查询的时候更明显。
3、select后面的字段是等下查询结果所显示的,where就是限制的条件,根据where查询到对应的列。
4、如果字段里面有数字的话也是可以根据数字大小进行查询的。
5、加入and语句可以同时限制两个条件来查询。
6、用%来查询,百分号在字母前表示以什么字母开头的,这里就是以名字为d开头来查询数据,同理把%放在后面就是以d结尾的名字。
sql查询由两部分组成
(1)查询的显示内容部分的表,也就是slelct后面的显示部分的表,那么就一定是查询的,比如这里的select t1.a,t2.b,t3.c,那么不管怎么说一定查询了 t1,t2,t3三张表,如果只查询了t1,t2两张,那么t3部分的数据是怎么出来的?所以,只要有显示的表就一定是查询的表。包括在显示部分(select中)的“子查询”,也算在这部分。
(2)流程表或中间表,这部分的表也查询了但不会出现在显示中,比如
select t1.a,t2.b,from t1,t2,t3 where t2.id=t3.id and t1.aa=t3.aa,这里显示的是t1,t2,但是查询的时候t1,t2,t3都查询了,只是t3属于中间表不需要显示,但是他也查询了,不然怎么判断t2.id=t3.id和t1.aa=t3.aa。当然这种也包括在where后面的子查询,子查询的表也算中间表。
当然以上是某种复杂的讲解,如果想简单的讲解也容易,那就是凡是跟在from后面的表,都是查询的表(左右连接也算在from后),如果这张表不需要查询,那么干嘛要写在这个语句中?当然包括子查询的from,只要是from那么后面的表一定就是需要查询的表。
select *
from T_1
where
T_1 .C1 = (select to_char(SYSDATE-1, 'yyyymm') || DECODE(TO_CHAR(SYSDATE, 'dd'), '08', '01', '15', '08', '22', '16', '01') from dual)
and T_1 .C1 = (select to_char(SYSDATE-1, 'yyyymm') || DECODE(TO_CHAR(SYSDATE, 'dd'), '08', '07', '15', '15', '22', '22', '07') from dual);
SELECT
distinct id,state,name
FROM
table1 main
WHERE
NOT EXISTS( select 1 FROM table1 sub where main.id=sub.id AND main.statesub.state);
未经测试。。。纯属手写,,如果以自己多年经验来说的话。。这段话应该不会有多大问题。。。希望你自己仔细测试之后能够提出宝贵意见!!!