遇到过的SQL | ORCALE

~ with as ()

~ ratio_to_report() over()

比例函数,即某行的某属性除以所有行该属性的总和。也就得到百分比

其中,over()里可指定分组。

pkeynametypescore
1job10195
2mark10191
3jars10293
4mode10289
--  求学生们的成绩占比
select *,ratio_to_report(score) over() as ratio from student;

-- 求学生们在各科目中的成绩占比
select *,ratio_to_report(score) over(PARTITION BY type) as ratio from student;

~ to_char(’’,‘999D99’)

可做精度的控制,"999D99"这里取得是小数点后两位

~ case end

相当于if,else: case到end之间相当于一个具体的值,可以做运算,取别名,嵌套case 等等。 只要把case到end当作一个运算结果的表达式就可以了。
语法:

 case exp when comexp then returnvalue
          ...
          when comexp then returnvalue
          else returnvalue
  end

简单示例

   select name,
          case sex 
          	when 1 then '男'
            when 0 then '女'
            else '保密'
          end
     from user;

特殊情况,利用case判断null值时

-- 情况一:这种写法虽然不报错,但结果却对不上
case harm.FACTOR_NAME when null then 'N' else 'Y' end
-- 情况二:这种写法会报错
case harm.FACTOR_NAME when is null then 'N' else 'Y' end
-- 正确写法
case when harm.FACTOR_NAME is null then 'N' else 'Y' end

~decode()

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
这个是decode的表达式,具体的含义解释为:

例子:

-- 常用写法
 select decode(sex,'0','女','1','男',null,'保密','未知') from user;
 -- 配合sign() 函数,
 --  sign根据某个值是0、正数还是负数,分别返回0、1、-1 
 select decode(sign(score-60),0,'刚好合格',1,'合格',-1,'不合格','未参加') from student;

ADD_MONTHS(args1,args2)

add_months 函数主要是对日期函数进行操作,add_months 有两个参数,第一个参数是日期,第二个参数是对日期进行加减的数字(以月为单位的)
举例子进行说明

--3个月以后的时间,可以用下列语句
select add_months(sysdate,3) from dual; 
 
--3个月以前的时间,可以用下列语句
select add_months(sysdate,-3) from dual;


~表结构变动

1、修改列名

	alter table 表名 rename column 旧列名 to 新列名;

2、修改列类型

	alter table 表名 modify (列名  varchar2(255));

3、删除表的一列:

	alter table  表名  drop column 列名;

4、给表增加一列:

	alter table 表名  add 列名   类型   default< not null>; 

~REGEXP_SUBSTR()

oracle 中对查询出来的数据进行切割、截取等操作,REGEXP_SUBSTR函数

这个函数的作用是正则分隔字符串,用法为

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
参数 :

  • srcstr :需要进行正则处理的字符串

  • pattern :进行匹配的正则表达式

  • position :起始位置,从第几个字符开始正则表达式匹配(默认为1)

  • occurrence :标识第几个匹配组,默认为1

  • modifier :模式('i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’。)

例子:

	select regexp_substr('1,2,3','[^,]+',1,1) result from dual;

----------持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值