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 结尾的数据只匹配一次
创建临时表
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