zoukankan      html  css  js  c++  java
  • 数据库函数

    2010年8月23日  15:45:06

                                               常用的系统函数
    1字符函数

    length函数

    select length('abcd') from dual;

    select length('abcd好') from dual;--5个字符
    select lengthb('abcd好') from dual;--6个字节 一个汉字两个字节

    trim函数 (去除空格函数)

    select ltrim(' abcd') from dual;--截左边的空格
    select rtrim(' abcd ') from dual;--截右边的空格
    select trim(' abcd ') from dual;--截所有的空格
    --如果字段类型是定长的,长度始终是规定的长度,所以查询的时候应该采用trim函数去掉空格

    更全的用法见oracle中trim,ltrim,rtrim函数用法


    substr函数 (截取字符函数)

    select substr('abcdefg',2,3) from dual; --表示从第二个字符取,取三个字符
    select substr('abcdefg',length('abcdefg')-3+1,3) from dual;--表示右取三个字符


    REPLACE函数(字符串替代函数)
    REPLACE('string','s1','s2')
    --string   希望被替换的字符或变量
    --s1       被替换的字符串
    --s2       要替换的字符串
    select replace('我的fid是22333','我','他') from dual; 结果为:他的fid是22333

    translate函数(字符级替代函数)

    字符替代函数

    SELECT translate('acdd','cd','ef') FROM dual; --aeff  直接将字母c换为e,字母d换为f

    如果是replace函数 SELECT REPLACE('acdd','cd','ef') FROM dual; --aefd  直接将cd换为ef

    LOWER函数

    返回字符串,并将所有的字符小写

    UPPER函数

    返回字符串,并将所有的字符大写

    initcap函数

    select initcap('ownership')  from G3E_ATTRIBUTE  --所选取的字段第一个字母用大写字母表示  

                                                                                                                                                                   CONTACT函数 相当于||

    select 'g3e_fid'||'设施特征唯一编号' a from G3E_ATTRIBUTE_BAK;  

    select concat('g3e_fid','设施特征唯一编号') a from G3E_ATTRIBUTE_BAK;

    instr函数   

    INSTR(C1,C2,I,J)   在一个字符串中搜索指定的字符,返回发现指定的字符的位置;  

    C1    被搜索的字符串  

    C2    希望搜索的字符串  

    I     搜索的开始位置,默认为1  

    J     出现的位置,默认为1 

    select instr('General Number','er',1,2) instring from G3E_ATTRIBUTE_BAK;    

    J为2则选择的是Number中的er;结果为13   

    J为1则选择的是General中的er;结果为4

    RPAD和LPAD函数

    RPAD(char1,n,char2)  在字符串char1的右边填充字符char2,直至字符串的总长度为n,char2的默认值为空格。如果char1长度大于n,则该函数返回char1左端的n个字符。

    LPAD (char1,n,char2)在字符串char1的左边填充字符char2,直至字符串的总长度为n,char2的默认值为空格。如果char1长度大于n,则该函数返回char1左端的n个字符。                                                                                                                                select lpad(rpad('G3E_FID',12,'是111'),14,'我的')from DUAL;

    --结果为:我G3E_FID是111--12和14表示粘贴字符后的字符数,如果超过规定的字符数就不粘贴了

    CHR函数

    ASCII 码值转换为字符

     select chr(45) from dual;结果为:-

    ASCII函数

     ASCII(char):该函数用于返回字符串首字符的ASCII码值。 

    2日期

    sysdate --系统时间

    select sysdate from dual;

    current_date --当前时间

    select current_date from dual;

    next_day 返回指定日期的下一个指定日期

    select next_day(sysdate,'星期一') from dual; 

    返回:2010-8-30 17:35:01 (现在为2010-8-24 )8-30正好为下一个星期一

    alter session set nls_date_format='dd-mon-yyy hh:mi:ss'

    select next_day(sysdate,'星期六')from dual;--当前时间的下一个星期六

    add_months

    add_months(d,n)  查看特定时间的d之前n月或D之后N月的时间

    select add_months(sysdate,-14) from dual; 结果为2009-6-24 16:53:57(当前系统时间2010-8-24 16:53:57)

    current_timestamp 返回当前会话时区的日期时间

    select current_timestamp from dual;结果为:24-8月 -10 04.57.06.593000 下午 +08:00

    dbtimezone 返回数据库所在时区

    select dbtimezone from dual;  结果为: +08:00

    extract 用于从日期时间中提取所需的数据

     select extract(year from sysdate) from dual; 结果为2010

     FROM_TZ 用于将特定时区的timestamp值转为timestamp with time zone

    select FROM_TZ(TIMESTAMP '2004-8-24 17:03:56','1:00') from dual;

    结果为:24-8月 -04 05.03.56.000000000 下午 +01:00

    last_day 返回特定日期所在月份的最后一天。

    select last_day(sysdate) from dual; 

    localtimestamp返回当前会话时区的日期时间

    select localtimestamp from dual; 结果:24-8月 -10 05.17.20.750000 下午

    months_between(d1,d2) 返回日期d1和d2之间相差的月数,若d1小于d2,返回负数,若d1和d2的天数相同或都是月底,返回整数

    select months_between(sysdate,'8-8月-2008') from dual; 返回:24.5395725059737

    new_time(date1,zone1,zone2):返回时区一的日期时间所对应的时区二的日期时间

    select new_time(to_date('2010-8-24 17:28:35','yyyy-mm-dd hh24:mi:ss'), 'bst','est') from dual; 

    返回:2010-8-24 23:28:35

     numtodsinterval(n,char_expr) 数字转换为时间,可转换为时、分、秒、天

    char_expr可以是day,hour,minute,second

    select numtodsinterval(1000,'minute') from dual; 1000转为分结果:+000000000 16:40:00.000000000

    numtoyminterval(n,char_expr):将数字n转换为interval year to month格式,其中char_expr可以是year或month

    select numtoyminterval(100000,'month') from dual;返回+000008333-04

    sessiontimezone:返回当前会话所在时区

    select sessiontimezone from dual;  返回+08:00

    sys_extract_utc(datetime_with_timezone):返回特定时区时间所对应的格林威治时间

    select sys_extract_utc(systimestamp) from dual;  返回24-8月 -10 11.54.09.015000 上午

    systimestamp 返回当前系统的日期时间和时区

    select systimestamp from dual;返回24-8月 -10 07.55.46.828000 下午 +08:00

    ROUND和TRUNC函数

    ROUND(n,[m]):该函数用于执行四舍五入运算;如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是整数,则四舍五入至小数点后m位。

    TRUNC(n,[m]) 该函数用于截取数字。如果省略数字m,则将数字n的小数部分截去;如果数字m是整数,则将数字n截取至小数点后的第m位;如果数字m是负数,则将数字n截取至小数点的前m位。

    to_dsinterval(char[,'nls_param']) 将符合特定日期和时间格式的字符串转变为interval day to second 类型

    select TO_DSINTERVAL('100 10:00:00') from dual; 返回:+000000100 10:00:00.000000000

    to_timestamp 将符合特定日期和时间格式的字符串转变为timestamp类型

    select to_timestamp('03-8月-10') from dual;返回:03-8月 -10 12.00.00.000000000 上午

    to_timestamp_tz 将符合特定日期和时间格式的字符串转变为timestamp with time zone类型

    select to_timestamp_tz('2003-08-10','yyyy-mm-dd') from dual;返回:10-8月 -03 12.00.00.000000000 上午 +08:00

    to_yminterval(char): 将字符串转变为interval year to month类型

     select sysdate+to_yminterval('01-01') from dual;

    返回当前时间的一年零一个以后的时间:2011-9-24 20:13:20

    tz_offset 用于返回特定时区与UTC(格林威治时间)相比的时区偏移

    select tz_offset('EST') from dual; 返回:-04:00 

    3转换

    to_char,to_date,to_number,cast

     select sysdate from dual;

    select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

    select to_date('12-3月-04') from dual;select to_number('3333') from dual;

     cast(expr as type_name):该函数用于将一个内置数据类型或集合类型转变为另一个内置数据类型或集合类型。

    select gwm_ano, cast( gwm_ano as varchar2(50) ) cat from gwm_attribute;

    4聚集函数

    sum,avg,max,min,count

    COUNT()函数 

    SELECT COUNT(au_lname) FROM authors

    AVG()函数   

    SELECT AVG(vote) FROM opinion 

    函数AVG()只能对数值型字段使用

    SUM()函数   

    SELECT SUM(purchase_amount) FROM orders

    MAX()函数    SELECT MAX(vote) FROM opinion

    MIN()函数    SELECT MIN(vote) FROM opinion

    5、数字函数

    ABS函数

    ABS(n),该函数用于返回数字n的绝对值。示例如下,
    declare
      v_abs number(6,2);
    begin
      v_abs:=abs(&no);
      dbms_output.put_line('绝对值:'||v_abs);
    end;
    输入no的值:-12.6,
    绝对值:12.6   

    ASIN函数

    ASIN(n):该函数用于返回数字n的反正弦值,输入范围范围-1-1,输出值的单位为弧度。示例如下:
    declare
      v_asin number(6,3);
    begin
      v_asin:=asin(.3);
      dbms_output.put_line('0.3的反正弦值:'||v_asin);
    end;
    0.3的反正弦值:.305                                                                                                                         

    ACOS函数

     ACOS(n):该函数用于返回数字n的反余弦值,输入值的范围-1-1,输出值的单位为弧度。示例如下:
    select acos(.3),acos(-.3) from dual;  

    TAN函数

    TAN(n)该函数用于返回数字n(以弧度表示的角)的正切值。

    TANH函数

    TANH(n)该函数用于返回数字n(以弧度表示的角)的双曲正切值。

    ATAN函数

    ATAN(n):该函数用于返回数字n的反正切值,输入值范围可以是任何数字,输出值的单位为弧度。示例如下:
    select atan(59),atan(55) from dual;  

    ATAN2函数

    ATAN2(n,m):该函数用于返回数字n除以数字m的反正切值。输入值除了m不能为0外,可以是任意数字(m不能为0),输出值的单位为弧度。示例如下:

    declare
      v_atan2 number(6,3);
    begin
      v_atan2:=atan2(19,3);
      dbms_output.put_line('19/3的反正切值:'||v_atan2);
    end;
    19/3的反正切值:1.414 

    CEIL函数

    返回大于或等于给出数字的最小整数      

    select ceil(3.1415927) from dual;  

    SIN函数

    SIN(n)该函数用于返回数字n(以弧度表示的角)的正弦值。

    SINH函数

    SINH(n)该函数用于返回数字n的双曲余弦值。 

    COS函数

     COS(n):该函数用于返回数字n(以弧度表示的角度值)的余弦值。
    declare
      v_cos number(6,3);
    begin
      v_cos:=cos(0.5);
      dbms_output.put_line('0.5的余弦值:'||v_cos);
    end;
    0.5的余弦值:.878

    COSH函数

     COSH(n):该函数用于返回数字n的双曲余弦值。示例如下:
    select cosh(0) "0的双曲余弦值" from dual;

     EXP函数

    EXP(n):该函数用于返回e的n次幂(e=2.71828183。。。)。示例如下:
    declare
      v_exp number(6,2);
    begin
      v_exp:=exp(4);
      dbms_output.put_line('e的4次方:'||v_exp);
    end;

    e的4次方:54.

    SQRT函数

    SQRT(n)该函数用于返回数字n的平方根,并且数字n必须大于等于0。 

    FLOOR函数

    该函数用于返回小于等于数字n的最大整数

    select floor(2345.67) from dual;   2345 

    LN函数

    LN(n):该函数用于返回数字n的自然对数,其中数字n必须大于0。示例如下:
    declare
      v_ln number(6,2);
    begin
      v_ln:=ln(4);
      dbms_output.put_line('4的自然对数:'||v_ln);
    end;
    4的自然对数:1.39  

    LOG函数

    LOG(m,n):该函数用于返回数字m为底的数字n的对数,数字n可以是除0和1以外的任何正整数,数字n可以是任何正整数。示例如下:

    select log(2,8),log(10,100) from dual; 

    MON函数

    MON(m,n):该函数用于取得两个数字相除后的余数。如果数字n为0,则返回结果为m。
    declare
      v_mod number(6,2);
    begin
      v_mod:=mod(10,3);
      dbms_output.put_line('10除3的余数:'||v_mod);
    end;
    10除3的数:1  

    POWER函数

     POWER(m,n):该函数用于返回数字m的n次幂,底数m和指数n可以是任意数字。但是如果数字m为负数,则数字n必须大于整数。   

    SIGN函数    取数字n的符号,大于0返回1,小于0返回-1,等于0返回0           

                                                                                    

     6、10g新增函数

     Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式

    四个新的函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和 REGEXP_REPLACE。它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法类似,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。 

       这四个函数支持正则表达式

    正则表达式字符说明:

     特殊字符含义:
    '^' 表示字符串的开始
    '$' 表示字符串的结束
    '.' 表示任何字符
    字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
    '?' 允许一个后继字符匹配零次或一次
    '+' 允许一个后继字符匹配一次或多次
    '*' 表示零次或多次
    '( )' 标记一个子表达式的开始和结束位置。
    '[]' 标记一个中括号表达式。
    '{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
    '|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
    \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

    [^...]:匹配字符集以外的任意字符。例如:[^a-f] 匹配 af 以外的任意字符。
    [...]:匹配一个字符集中的任意字符。在字符集中使用短划线分隔第一个字符和最后一个字符。例如:
           [123] 匹配数字 123
           [a-f] 匹配从 af 的任意字母

     

    字符簇:
    [[:alpha:]] 任何字母。
    [[:digit:]] 任何数字。
    [[:alnum:]] 任何字母和数字。
    [[:space:]] 任何白字符。
    [[:upper:]] 任何大写字母。
    [[:lower:]] 任何小写字母。
    [[:punct:]] 任何标点符号。
    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

    各种操作符的运算优先级
    转义符/
    (), (?:), (?=), [] 圆括号和方括号
    *, +, ?, {n}, {n,}, {n,m} 限定符
    ^, $, anymetacharacter 位置和顺序
    | “或”操作

    具体的可见 http://www.google.com/support/a/bin/answer.py?hl=zh-CN&answer=1371415

    测试数据:

    create table test5(mc varchar2(60));
    insert into test5 values('112233445566778899');
    insert into test5 values('22113344 5566778899');
    insert into test5 values('33112244 5566778899');
    insert into test5 values('44112233 5566 778899');
    insert into test5 values('5511 2233 4466778899');
    insert into test5 values('661122334455778899');
    insert into test5 values('771122334455668899');
    insert into test5 values('881122334455667799');
    insert into test5 values('991122334455667788');
    insert into test5 values('aabbccddee');
    insert into test5 values('bbaaaccddee');
    insert into test5 values('ccabbddee');
    insert into test5 values('ddaabbccee');
    insert into test5 values('eeaabbccdd');
    insert into test5 values('ab123');
    insert into test5 values('123xy');
    insert into test5 values('007ab');
    insert into test5 values('abcxy');
    insert into test5 values('The final test5 is is is how to find duplicate words.');
    commit;
     

    REGEXP_LIKE函数
    select * from test5 where regexp_like(mc,'^a{1,3}');
    select * from test5 where regexp_like(mc,'a{1,3}');
    select * from test5 where regexp_like(mc,'^a.*e$');
    select * from test5 where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');
    select * from test5 where regexp_like(mc,'^[[:lower:]]');
    Select mc FROM test5 Where REGEXP_LIKE(mc,'[^[:digit:]]');

    Select mc FROM test5 Where REGEXP_LIKE(mc,'^[^[:digit:]]');

     

    REGEXP_INSTR函数
    Select REGEXP_INSTR(mc,'[[:digit:]]$') from test5;  112233445566778899
    Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test5;
    Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;
    Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;
    Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;

    Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;

     

    REGEXP_SUBSTR函数
    SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test5;
    SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test5;

    SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;

     

    REGEXP_REPLACE函数
    Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;
    Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;

     

    7其他

    select user from dual;--查询当前用户                                                                                                                  

    decode函数

    select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;

    select sum(decode('sex','男',1,0)) 男人数,sum(decode('sex','女',1,0)) 女人数 from e;

    sign()函数

    根据某个值是0、正数还是负数,分别返回0、1、-1;

    nvl函数

    NVL函数的格式如下:NVL(expr1,expr2)

    含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值select a1,nvl(a2,'未输入'),a3 from aa;--处理空值

    NVL2函数

    NVL2函数的格式如下:NVL2(expr1,expr2, expr3)

    含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。

    NULLIF函数

    NULLIF(expr1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。

    Coalesce函数

    Coalese函数的作用是的NVL的函数有点相似,其优势是有更多的选项。

    格式如下:Coalesce(expr1, expr2, expr3….. exprn)Coalesce是这样来处理这些参数的。如果第一个参数为空,则看第二个参数是否是空,否则则显示第一个参数,如果第二个参数是空再看第三个参数是否为空,否则显示第二个参数,依次类推。这个函数实际上是NVL的循环使用  

    sys_guid ()函数

    在Oracle 8i以后提供sys_guid ()方法

     
    方法作用:
    系统根据当前时间和机器码,生成全球唯一的一个序列号。
     
    方法使用场景:
          这在对象在不同机器的不同数据库里生成以及需要在后来合并到一起的情况下很有用,因为这样可以防止主键冲突。
           因为采用sequence的话,只能保证在同一个数据中该序列号唯一,但是在不同的数据库实例中有可能冲突。
    该方法的弊端:
         由于sys_guid ()生成的序列号过长,这会消耗数据库存储空间,且管理不方便。
    基于此,在非并行环境下的数据库应用中,应尽量避免使用sys_guid ()
    方法举例:
       select sys_guid() from dual;
    -------------------------------------------
        6E3DC539CF7944E7BC4650D0EEF06865

     

     

     

  • 相关阅读:
    每日一题-mysql(持续更新)
    http面试问题集锦
    存储测试简析
    横向越权测试—安全漏洞
    性能数据的准备-Jmeter
    获取当天七天时间
    vue生命周期
    vue的全选与反选
    filter兼容问题
    Http与Https
  • 原文地址:https://www.cnblogs.com/lanzi/p/1806579.html
Copyright © 2011-2022 走看看