~ with as ()
~ ratio_to_report() over()
比例函数,即某行的某属性除以所有行该属性的总和。也就得到百分比
其中,over()里可指定分组。
pkey | name | type | score |
---|---|---|---|
1 | job | 101 | 95 |
2 | mark | 101 | 91 |
3 | jars | 102 | 93 |
4 | mode | 102 | 89 |
-- 求学生们的成绩占比
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;
----------持续更新