常用内置函数

decode

--对某字段判断抄的条件判断的结果是1,那么decode返回a,以此类推
select decode(condition,1,a,2,b,3,c,d) from dual;

exists,not exists

--exists中能查询到数据就返回真,用法于in类似。
select h.bp_id
  from hls_bp_master h
 where exists (select 1 from con_contract c where c.bp_id_tenant = h.bp_id)

substr

-- L190941  (第二批)
select substr('L190941(第二批)', 1, instr('L190941(第二批)', '(') - 1),
       substr('L190941(第二批)', instr('L190941(第二批)', '('))
  from dual;
--11 22 33 44 55
select regexp_substr('11,22,33,44,55,', '[^,]+', 1, level) as name
  from dual
connect by regexp_substr('11,22,33,44,55,', '[^,]+', 1, level) is not null;

to_char

9代表如果存在数字则显示数字,不存在则显示空格。
0代表如果存在数字则显示数字,不存在则显示0,即占位符。

--9999.0956  09999.0956
select to_char(9999.09556, 'fm99999.0900'),
       to_char(9999.09556, 'fm00099.0900')
  from dual;

to_date

在使用Oracle的to_date函数来做日期转换时,使用'yyyy-MM-dd HH:mm:ss'的格式在Oracle中会引起错误:“ORA 01810 格式代码出现两次”,原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟'yyyy-MM-dd HH24:mi:ss'

select to_date('2023-03-06 10:11:35','yyyy-mm-dd HH24:MI:SS') from dual;

extract

--抽取函数 2013 11
select extract(year from date'2013-11-30') year,extract(month from date'2013-11-30') month from dual;

add_months,months_between

--add_months(date,number) 获取date的number月后的日期  
--2022/8/20  2022/8/24 11:09:10
select trunc(add_months(last_day(sysdate), -1) + 20),sysdate from dual;
-- 2022/8/31 11:11:57  2022/8/24 11:11:57
select last_day(sysdate),sysdate from dual;
--504 计算两个时间之间间隔的月份
select months_between(sysdate,to_date('1980-9-19', 'yyyy-mm-dd')) from dual

wm_concat,listagg,xmlagg

-- APP_DESC,APPTYPE,CODE,CREATIONTIME
select wmsys.wm_concat(column_name)
  from user_tab_columns s
 where s.TABLE_NAME = upper('sm_appregister');

greatest,least

greatest取参数最大值,least取最小值

--2022/8/26 14:50:36  4
select greatest(sysdate,sysdate+1,sysdate+2),least(5,6,4) from dual;

over

row_number():排序,不会有重复的排序数值。对于相等的两个数字,排序序号不一致,123
dense_rank():排序,可有重复值。对于相等的两个数字,排序序号一致,112
rank():排序,可有重复值。对于相等的两个数字,排序序号一致,但是总数会减少,113

select * ,row_number() over (partition by 父表id order by 子表某个字段) from 子表;
--partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。
-eg.
select *
  from (select c.billno,
               a.pk_org,
               a.pk_psndoc tjr,
               b.pk_psndoc spr,
               row_number() over(PARTITION BY c.billno order by to_date(c.dealdate, 'YYYY/MM/DD HH24:MI:SS') desc) as rn
          from pub_workflownote c, sm_user a, sm_user b
         where c.senderman = a.cuserid
           and c.checkman = b.cuserid
           and c.billno = 'CZSQ2022092900000002')
 where rn = 1;

rawtohex,sys_guid

--返回32位全球唯一码 CB40A3586A204F90B1C76DA63EDB59F1
select rawtohex(sys_guid()) from dual;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值