Oracle12C | 常用方法

1. 数字操作

1.1 round(p1, p2) 保留小数点位数

1.2 nvl(expr1, expr2) 如果expr1为空,则返回expr2

1.3 greatest() 取几个数之间最大

select greatest(24,32,56) from dual;
-- 要把负数转化为0,即在负数和零之间取较大值就行
select greatest(-23,0) from dual;

1.4 to_number(字符串,格式) 将字符串转换成数字

-- 将字符串"33" 转换成数字 33
SELECT to_number('-33') FROM DUAL
-- 将数字33 转换成 负数 -33
SELECT to_number('-' || 33) FROM DUAL

2. 字符(串)操作

2.1 concat(p1, p2) 字段拼接, 可多个方法套用

-- 查找 BAS_PROINFO 中 ipil.code^ipil.mCode 和 BAS_PROINFO 中 mCode 值 相同的数据
SELECT ipil.code,ipil.mCode,bmo.mName,sum(ipil.num) FROM PRO_INFO ipil left join BAS_PROINFO bmo on bmo.mCode = concat(ipil.code,concat('^', ipil.maCode)) GROUP BY ipil.code,ipil.mCode,bmo.mName

2.2 substr(str,p1,p2) 截取字符串,p1是开始位,p2是截取长度

2.3 instr(expr1, expr2) 获取指定字符

instr(字段名,指定字符)
instr(字段名,指定字符,开始位置,第几次出现)

2.4 length(expr1) 获取字符串长度

length(指定字符串)

2.5 sys_guid() 自动生成32位类ID字符串

-- 自动生成32位不重复字符串序列, 可用于作为视图的ID
SELECT rawtohex(sys_guid()) FROM STU_GRA

2.6 replace(expr1, expr2,expr3) 替换

replace(字段名,'指定字符','替换字符')

3. 日期操作

3.1 trunc

  • 作用于日期
trunc(sysdate)                 //返回当前日期,无时分秒
trunc(sysdate,'year')          //返回当前年的1月1日,无时分秒
trunc(sysdate,'month')        //返回当前月的1日,无时分秒
trunc(sysdate,'day')          //返回当前星期的星期天,无时分秒
  • 作用于数字
trunc(number,decimals) //number 数字;decimals 位数,正数小数点后,负数小数点前,不做四舍五入

3.2 sysdate 取当前系统时间

3.3 to_date(expr1,expr2) 日期格式化

# [日期] 长度不能超过 yyyy-MM-dd
# 超过时报错: ORA-01830: 日期格式图片在转换整个输入字符串之前结束
to_date([日期], 'yyyy-MM-dd')
# [日期] 长度超过转换格式时
to_date(to_char([日期], 'yyyy-MM'), 'yyyy-MM')

4. 语句

4.1 case when 条件语句

select
proCode,
proName,
(
    CASE proType
    WHEN '01' THEN '上衣'
    WHEN '02' THEN '帽子'
    WHEN '03' THEN '首饰'
    ELSE ''
    END
) AS proType
from
BAS_PROINFO
where proType in ('01','02','03')

//then 和 else 后面还可接 select 语句,看下面例子

select
proCode,
proName,
proType
(
    CASE proType
    WHEN '01' THEN
    (
        select sum(num) from BAS_PROINFO_CLOTH where proType = '01'
    )
    ELSE
    (
        sum(num)
    )
    END
) AS proNum
from
BAS_PROINFO
where proType in ('01','02','03')
group by
proCode,
proName,
proType

4.2 union all 对两个结果集求并集,包含重复行

  • 多个表数量关联求和(例子)
select
proCode,
sum(num)
from
(
    (
        select
        proCodeA AS proCode,
        sum(numA) AS num
        from
        BAS_PROINFO_A
        group by
        proCodeA
    )
    UNION ALL
    (
        select
        proCodeB AS proCode,
        sum(numB) AS num
        from
        BAS_PROINFO_B
        group by
        proCodeB
    )
)
group by
proCode

//union all 要求并集的表字段类型必须相同!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值