• [学习笔记] Oracle字符串函数、日期函数、数值函数、转换函数、聚合函数


    函数

    • 单行函数:对一行数据进行操作的函数,如字符串函数、数值函数、转换函数、日期函数等。
    • 聚合函数:同时对多行数据进行操作,如求和函数等。

    字符串函数

    函数 说明
    ASCII(X) 求字符X的ASCII码
    CHR(X) 求ASCII码对应的字符
    LENGTH(X) 求字符串X的字符长度
    CONCATA(X,Y) 连接X和Y两个字符串
    INSTR(X,Y[,START]) 查找在字符串X中字符串Y的位置,可以指定从Start位置开始搜索,默认从头开始
    LOWER(X) 把字符串中大写字母转换为小写
    UPPER(X) 把字符串中小写字母转换为大写
    INITCAP(X) 把字符串中所有单词首字母转换为大写,其余小写
    LTRIM(X[,Y]) 去掉字符串X左边的Y字符串,Y不填时,默认的是字符串X左边去空格
    RTRIM(X[,Y]) 去掉字符串X右边的Y字符串,Y不填时,默认的是字符串X右边去空格
    TRIM(X[,Y]) 去掉字符串X两边的Y字符串,Y不填时,默认的是字符串X左右去空格
    REPLACE(X,old,new) 将字符串中的old字符替换为new字符
    SUBSTR(X,start[,length]) 截取字符串X,从start位置开始截取长度为length的字符串,length不填默认为截取到字符串X末尾
    RPAD(X,length[,Y]) 对字符串X进行右补字符Y使字符串长度达到length长度
    LPAD(X,length[,Y]) 对字符串X进行左补字符Y使字符串长度达到length长度

    日期函数

    函数 说明
    sysdate() 系统的当前时间
    systimestamp() 系统的当前时间,包含时区信息,精确到微秒
    dbtimezone() 返回数据库时区
    ADD_MONTHS(r,n) 返回在指定日期r上加上月份n后的日期,n可以为负数
    LAST_DAY(r) 返回指定r日期的当前月份的最后一天的日期
    NEXT_DAY(r,c) 返回指定r日期后的星期几c对应的日期
    EXTRACT(time) 返回指定time时间当中的年月日、时分秒等特定部分
    MONTHS_BETWEEN(r1,r2) 返回两个日期间的月份数,结果是正数、负数、小数
    ROUND(r[,f]) 将日期r按f的格式进行四舍五入
    TRUNC(r[,f]) 将日期r按f的格式进行截取
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
    select systimestamp from dual;
    select dbtimezone from dual;
    
    -- 结果为 2018-11-30,2018-10-31
    select 
    	to_char(add_months(to_date('2018-10-31','yyyy-mm-dd'),1),'yyyy-mm-dd'), 
    	to_char(add_months(to_date('2018-09-30','yyyy-mm-dd'),1),'yyyy-mm-dd')
    from dual;
    
    select last_day(sysdate) from dual;
    
    select next_day(to_date('2018-11-12','yyyy-mm-dd'),'星期四') from dual;
    
    select extract(year from timestamp '2018-11-12 15:36:01') as year,
           extract(month from timestamp '2018-11-12 15:36:01') as month,
           extract(day from timestamp '2018-11-12 15:36:01') as day,  
           extract(minute from timestamp '2018-11-12 15:36:01') as minute,
           extract(second from timestamp '2018-11-12 15:36:01') as second
    from dual;
    
    select months_between(to_date('2018-11-12', 'yyyy-mm-dd'),
                          to_date('2017-11-12', 'yyyy-mm-dd')) as zs, --整数
           months_between(to_date('2018-11-12', 'yyyy-mm-dd'),
                          to_date('2017-10-11', 'yyyy-mm-dd')) as xs, --小数
           months_between(to_date('2017-11-12', 'yyyy-mm-dd'),
                          to_date('2018-10-12', 'yyyy-mm-dd')) as fs --负数
    from dual;
    
    select sysdate, --当前时间
           round(sysdate, 'yyyy') as year, --按年
           round(sysdate, 'mm') as month, --按月
           round(sysdate, 'dd') as day, --按天
           round(sysdate) as mr_day, --默认不填按天
           round(sysdate, 'hh24') as hour --按小时
    from dual;
    
    select sysdate, --当前时间
           trunc(sysdate, 'yyyy') as year, --按年
           trunc(sysdate, 'mm') as month, --按月
           trunc(sysdate, 'dd') as day, --按天
           trunc(sysdate) as mr_day, --默认不填按天
           trunc(sysdate, 'hh24') as hour --按小时
    from dual;
    

    数值函数

    函数 解释
    ABS(X) 求数值X的绝对值
    COS(X) 求数值X的余弦
    ACOS(X) 求数值X的反余弦
    CEIL(X) 向上取整
    FLOOR(X) 向下取整
    log(x,y) 求x为底y的对数
    mod(x,y) 求x除以y的余数
    power(x,y) 求x的y次幂
    sqrt(x) 求x的平方根
    round(x[,y]) 求数值x在y位进行四舍五入。y默认为0,可以为负数
    trunc(x[,y]) 求数值x在y位进行直接截取。y默认为0,可以为负数

    转换函数

    函数 解释
    asciistr(x) 把字符串转换为数据库字符集对应的ASCII值
    bin_to_num(x1[x2...]) 二进制数值转换为十进制数值
    cast(x as type) 把x转换为type类型的数据
    convert(x,d_chset[,r_chset]) 对字符串x按原字符集r_chset转换为目标字符集d_chset
    to_char(x[,f]) 把字符串或时间类型x按格式f转换为字符串
    to_date(x[,f]) 把字符串x按照格式f转换为时间类型
    to_number(x[,f]) 把字符串x按照格式f转换为数值类型

    其中数值的格式f可以参考下表:

    参数 示例 说明
    9 999 指定位置返回数字
    . 99.9 指定小数点的位置
    99,9 指定位置返回一个逗号
    $ $99.9 指定开头返回一个美元符号
    EEEE 9.99EEEE 指定科学计数法

    聚合函数

    函数 解释
    AVG([distinct ] expr) 求列或列组成的表达式expr的平均值
    count(*|[distinct]expr) 计算查询结果的条数或行数
    MAX([distinct] expr) 指定列或列组成的表达式expr中的最大值
    MIN([distinct] expr) 指定列或列组成的表达式expr中的最小值
    SUM([distinct] expr) 对指定列或列组成的表达式expr进行求和
    select classno, avg(t.age) from stuinfo t where t.age < 30 group by t.classno;
    
    select classno, sum(age), count(*), sum(age) / count(*), avg(age) from stuinfo t where t.age < 30 group by t.classno;
    
  • 相关阅读:
    UVA 1515 Pool construction 最大流跑最小割
    BZOJ 1060: [ZJOI2007]时态同步 树形DP
    Codeforces Round #282 (Div. 1)B. Obsessive String KMP+DP
    BZOJ 4027: [HEOI2015]兔子与樱花 贪心
    BZOJ 2435: [Noi2011]道路修建 dfs搜图
    HDU 5297 Y sequence 容斥/迭代
    HDU 5296 Annoying problem dfs序 lca set
    HDU 5289 Assignment RMQ
    343D/Codeforces Round #200 (Div. 1) D. Water Tree dfs序+数据结构
    php mysqli扩展库之预处理操作
  • 原文地址:https://www.cnblogs.com/danhuang/p/12498596.html
Copyright © 2020-2023  润新知