oracle 小知识

oracle: 数值随机的函数是 dbms_random.value(最大值,最小值)   用法是select dbms_random(3,0) from dual;

oracle: 获取前100条 的函数是 rownumber <=100 用法是select * from dual where rownumber<=100;

oracle: cast((nvl(sum(case b.hgxs when b.jcxs then 1 end),0)/nvl(count(a.id),0))*100 as decimal(18,2)) 类型转换

按小时分组,每个小时里面有好些笔数据,每个小时内只取一笔数据

partition by 是分组,每小时取一笔数据所以就按小时分组,同时,按照id 也是每个id里面取一条数据,(为的是id不丢失)

oracle: row_number() over(partition by to_char(a.sjsj,'yyyy-MM-dd hh24'),c.id  order by to_char(a.sjsj,'yyyy-MM-dd hh24') desc) newIndex

   where  newIndex<=1   定义,每个组里取1 到0 条数据,

用法是:

select * from (

select row_number() over(partition by to_char(a.sjsj,'yyyy-MM-dd hh24'),c.id  order by to_char(a.sjsj,'yyyy-MM-dd hh24') desc) newIndex ) bb

where bb.newIndex <=1;

oracle:获取某一个月的天数:to_char(last_day(to_date(e.ny,'yyyy-mm')),'dd')

oracle: 汉字与小数点数字拼接 '压力'||':'||TO_CHAR(c.ckyl,'FM99999990.90')  这样是为了防止小数点前的零丢失  例如:0.23 不这样写会变成  **:.23 

oracle正则表达式regexp_like的用法详解 :例如    where regexp_like(c日期字段,'(00:00)${1}')    意思是取数据,条件是这个时间字段以 00:00 结尾的数据只匹配一次

创建临时表

 create global temporary table tmp_tab_name on commit preserve rows
as select xxx from xxx      这个意思是创建一个和另一个表结构一样的临时表

on commit preserve rows 和 on commit delete rows的区别就是session内commit后数据是否保留,preserve会一致保留,delete会清掉

oracle插入数据时先判断有无该数据,然后在插入,

像sql

IF NOT EXISTS(SELECT * FROM ZYRISDB.dbo.SYSTEM_APP_CONFIG WHERE CONFIG_NAME='isUpdate_Room')
BEGIN
INSERT INTO ZYRISDB.dbo.SYSTEM_APP_CONFIG
( CONFIG_NAME ,
VALUE ,
MEMO ,
HOSPITAL_ID
)
VALUES ( 'isUpdate_Room' , -- CONFIG_NAME - varchar(200)
'US' , -- VALUE - varchar(500)
'叫号时需要修改诊室的科室' , -- MEMO - varchar(max)
'-1' -- HOSPITAL_ID - varchar(30)
)
END
GO

oracle的写法是

insert
when (not exists (select 1 from SYSTEM_APP_CONFIG where CONFIG_NAME='isUpdate_Room')) then
into SYSTEM_APP_CONFIG select 'isUpdate_Room' ,'US' ,'叫号时需要修改诊室的科室(每个科室之间用逗号隔开。例:US,CR)' ,'-1' from dual

原文地址:https://www.cnblogs.com/zcwry/p/oracle_hanshu.html