Oracle 常用函数的使用

本文详细介绍了SQL中常用的截取与转换函数,包括round、trunc、extract、ceil、floor、decode、nvl、nvl2、sign、to_number、to_char、to_date、to_timestamp和bitand。通过实例展示了如何使用这些函数进行数据处理,适用于数据库操作人员和技术爱好者。
摘要由CSDN通过智能技术生成

截取函数

round         

Round(number,[decimal_places])四舍五入函数
    number:需要处理的数据
    decimal_places:可选,四舍五入时小数留几位 ( 默认为 0 )
    例子:
        select round(12.345) from dual;     ----result:12
        select round(12.345,1) form dual;    ----result:12.3
        select round(12.345,2) from dual;    ----result:12.35

              
trunc

trunc(date,[fmt])
    date:需要被截取的date数据
    fmt:可选, 日期格式,用以指定的元素格式来截去输入的日期值。忽略它则由最近的日期截去
    例子:
        select trunc(sysdate,'yyyy') from dual;    ----result:返回当年第一天
        select trunc(sysdate,'mm') from dual;      ----result:返回当月第一天
        select trunc(sysdate,'d') from dual;       ----result:返回当周第一天(以礼拜天为第一天)    
        select trunc(sysdate,'dd') from dual;      ----result:返回当天零点时间


extract

extract(time from dateTime)截取特定内容从日期数据
    time:日期数据中的特定数据, { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }   
    dateTime:被截取的日期数据, { date_value | interval_value }
    例子:
        select extract(year from sysdate) from dual;    ----result:2019
        select extract(month from sysdate) from dual;   ----result:8
        select extract(day from sysdate) from dual;     ----result:7

    //获取两个日期之间的具体时间间隔,extract函数是最好的选择
    例子:
        //取sysdate1和sysdate2两个时间之间间隔的天数
        select extract(day from (sysdate1-sysdate2)) from dual;
        select extract(day from (systimestamp1-systimestamp2)) from dual;

ceil/floor

ceil(n)/floor(n)
    ceil(n) 取大于等于数值n的最小整数;
    floor(n)取小于等于数值n的最大整数
    例子:
        select ceil(5.6) from dual;    ----result:6
        select floor(5.6) from dual;   ----result:5
    
    实际案例:
        //计算员工加入公司的天数
        select ceil(fireDate-employDate) from dual;
    

条件判断函数

decode

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF
    
    例子:
        //比较大小,取num1和num2之间数值小的一方
        select decode(sign(num1-num2),-1,num1,num2) from dual;

        //和order by 一起进行排序,例如,对tb_subject表的subject_name里面的内容以理化生顺序进行排序
        select * from tb_subject order by decode(subject_name,'物理',1,'化学',2,'生物',3);


nvl

nvl(expression1,repression2)
    expression1:表达式1,字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值
    expression2:表达式2
    逻辑:判断expression1的内容是否为null,如果为null则返回expression2,如果expression1不为null则返回expression1;

    注意:expression1的数据类型必须和expresssion2的数据类型一致;除非显式的使用to_char()将表达式的值进行转换。


nvl2(E1, E2, E3)            

nul2(expression1,expression2,expression3)
    expresssion1:表达式1
    expresssion2:表达式2
    expresssion3:表达式3

    nvl2()是nvl()的增强版, 逻辑为:如果expresssion1为NULL,则函数返回expresssion3,否则返回expresssion2


sign                   

sign(expression)
    逻辑:根据expression是0、正数还是负数,分别返回0、1、-1

    例子:
        //判断大小,结合decode()
        select decode(sign(num1-num2),1,'num1>num2','num2>=num1') from dual;    

转换函数


to_number/to_char

to_number(x [, format], [ nls_language ])  ||  to_char(n [, fmt [, 'nlsparam']])
    to_number()和to_char()函数作用相反

    to_number():将字符串转换为数值型
        x: 是将要被转换成number的字符串
        format: 可选项,是用来将x转换成number的格式
        nls_language: 可选项,是nls语言,用来将x转换成number

    to_char():将数值型转化为字符串
        n: 需要被转换为字符串的数据 timestamp、int、float、numeric
        fmt: 需要被转换的数据格式
        nlsparam:指定由数值格式的元素返回的字符
            .小数点字符
            .组分隔符
            .本地钱币符号
            .国际钱币符号

ElementExampleDescription
, .1,234.56Commas and decimal points  逗号和小数点
$$123.45Leading dollar sign. 前置$符号
00012.34Leading or trailing 0. 前置或后置0
9123Any digit. 任意数字
BB123Leading blank for integers. integer类型前置空白符
CC123The ISO currency symbol defined in the NLS_ISO_CURRENCY parameter.定义在NLS_ISO_CURRENCY参数中的国际标准货币符号
D123D99The current decimal character defined in the NLS_NUMERIC_CHARACTERS parameter. The default value is a period.
EEEE1.2EEEReturns a value in scientific notation.用科学计数法表示返回值
G9G123Returns the group separator (e.g., a comma).
LL123Returns the local currency symbol.
MI123MInegative value with trailing minus sign; returns positive value with a trailing blank.
PR123PRThe negative values in angle brackets.
RNIvalues in Roman numerals, uppercase.
rnivalues in Roman numerals, lowercase.
S (prefix)S1234negative values with a leading minus sign, positive values with a leading positive sign.
S (suffix)1234Snegative values with a trailing minus sign, positive values with a trailing positive sign.
TMTMThe text minimum number format model returns the smallest number of characters possible.
UU123the Euro currency symbol or the NLS_DUAL_CURRENCY parameter.
V123V99a value multiplied by 10n, where n is the number of 9s after the V.
XXXXXthe hexadecimal value.十六进制值


to_timestamp/to_date

to_date(string1 [, format_mask] [, nls_language]) || to_timestamp(string1 [, format_mask] ['nlsparam'] ) 

    string1: 需要被转化为date的字符串
    format_mask: 可选,转化格式
    nls_language: 可选,用于转化date的nls语言
    例子:
        TO_DATE('2003/07/09', 'yyyy/mm/dd')    ----Result: date value of July 9, 2003
        TO_DATE('070903', 'MMDDYY')            ----Result: date value of July 9, 2003
        TO_DATE('20020315', 'yyyymmdd')        ----Result: date value of Mar 15, 2002

        TO_TIMESTAMP('2003/12/13 10:13:18', 'YYYY/MM/DD HH:MI:SS')    ----'13-DEC-03 10.13.18.000000000 AM'

            
bitand

bitand( expr1, expr2 )
    逻辑: 在expr1和expr2之间进行位运算
    注意:expr1和expr2必须为非负整型数据
    
    例子:
        select bitand(15,7) from dual;    ----result:7
        select bitand(5,0) from dual;     ----result:0
      
        15=2^3+2^2+2^1+2^0      1111
        7=2^2+2^1+2^0           0111
                               -------按位与运算
                                0111

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值