zoukankan      html  css  js  c++  java
  • oracle函数

    SELECT INITCAP('the soap') "Capitals" FROM DUAL; --首字母大写 帕斯卡命名法
    select LOWER('XIAOJIANJIAN') "list" FROM DUAL; 
    SELECT LOWER('MR. SCOTT MCMILLAN') "Lowercase" FROM DUAL; --全部小写
    SELECT UPPER('last_name') "Uppercase"FROM DUAL;     --全部大写
    SELECT CONCAT(CONCAT('last_name', '''s job category is '),student."id") "Job" FROM student WHERE student."id" =3;--连接字符串
    SELECT SUBSTR('ABCDEFG',3,4) "Substring" FROM DUAL; --截取字符串
    SELECT LENGTH('CANDIDE') "Length incharacters" FROM DUAL;
    SELECT LENGTHB ('CANDIDE') "Length inbytes" FROM DUAL;--通过这个示例,我们可以看出来,Length 和 Lengthb 函数的一个重要用处,就是用来判断记录值里是否有中文内容。
    SELECT INSTR('CORPORATE FLOOR','OR', 3, 2)"Instring" FROM DUAL;--('大字符串','小字符串')返回小字符串在大字符串中出现的位置
    SELECT LPAD('Page 1',15,'*.') "LPAD example"FROM DUAL;
    
    Lpad()函数的用法:
    
    lpad函数将左边的字符串填充一些特定的字符其语法格式如下:   
    
         lpad(string,n,[pad_string])
    
         string:可是字符或者参数
    
         n:字符的长度,是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
    
         pad_string:是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。
    
        例如:
    
    lpad('tech', 7); 将返回' tech'
    
    lpad('tech', 2); 将返回'te'
    
    lpad('tech', 8, '0'); 将返回'0000tech'
    
    lpad('tech on the net', 15, 'z'); 将返回'tech on the net'
    
    lpad('tech on the net', 16, 'z'); 将返回'ztech on the net'
    
    
    Rpad()函数的用法:
    
    rpad函数将右边的字符串填充一些特定的字符其语法格式如下:   
    
         rpad(string,n,[pad_string])
    
         string:可是字符或者参数
    
         n:字符的长度,是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
    
         pad_string:是个可选参数,这个字符串是要粘贴到string的右边,如果这个参数未写,lpad函数将会在string的右边粘贴空格。
    
        例如:
    
    rpad('tech', 7); 将返回' tech'
    
    rpad('tech', 2); 将返回'te'
    
    rpad('tech', 8, '0'); 将返回'tech0000'
    
    rpad('tech on the net', 15, 'z'); 将返回'tech on the net'
    
    rpad('tech on the net', 16, 'z'); 将返回'tech on the netz'
    
    作者 在爬行中进步
    
    ORACLE对字符串去空格处理(trim)
    首先便是这Trim函数。Trim 函数具有删除任意指定字符的功能,而去除字符串首尾空格则是trim函数被使用频率最高的一种。语法Trim ( string ) ,参数string:string类型,指定要删除首部和尾部空格的字符串返回值String。函数执行成功时返回删除了string字符串首部和尾部空格的字符串,发生错误时返回空字符串("")。 如果参数值为null时,会抛出空指针异常。在oracle中,trim使用的形式多为人rtrim()与ltrim()两种,分别为去除字符串右边空格与去除字符串左边空格。
    
           当然trim的功能不止如此,下面进行细致的介绍,这里我多以去除字符串空格为例。
    
    我们看下trim函数的语法描述:trim( [ {  {leading|trailing|both}  [trim_character]|trim_character}  from] trim_source
    
    1)、不使用任何参数
    
    SQL> select trim('   11   ') aa from dual;
    
    AA
    --
    11
    
    这是最常见的一种使用方法,都使用默认的参数,默认情况下TRIM会同时删除字符串前后出现的空格。
    
    2)、使用both参数,效果等同于方法一不使用任何参数
    
    SQL> select trim(both from '   11   ') aa from dual;
    
    AA
    --
    11
    
    “BOTH”参数表示同时去除字符串前后所指定的内容(默认情况下删除空格)。
    
    3)、使用leading与trailing参数
    
    SQL> select trim(leading from '   11  ') aa from dual;
    
    AA
    ----
    11
    
    SQL> select trim(trailing from '   11  ') aa from dual;
    
    AA
    -----
       11
    从结果中得分隔符'-',可以发现使用leading参数可以去除字符串右端的空格,而trailing参数则可以去除字符串左端的空格。正如oracle提供的rtrim()与ltrim()。
    
    4)、使用trim_character参数
    
    trim_character参数改变了“删除空格”的默认行为。如果想要删除字符串'xxxxWORLDxxxx'前后出现的“x”,“trim_character”参数就派上用场了。
    
    SQL> select trim('x' from 'xxxxWORLDxxxx') aaaaa from dual;
    
    AAAAA
    -----
    WORLD
    
    trim_character配合“both”、“trailing”和“leading”三个参数使用效果如下,与之前演示类似。看结果,不赘述。
    
    SQL> select trim('x' from 'xxxxWORLDxxxx') aaaaa from dual;
    
    AAAAA
    -----
    WORLD
    
    SQL> select trim(both 'x' from 'xxxxWORLDxxxx') aaaaa from dual;
    
    AAAAA
    -----
    WORLD
    
    SQL> select trim(trailing 'x' from 'xxxxWORLDxxxx') aaaaa from dual;
    
    AAAAA
    ---------
    xxxxWORLD
    
    SQL> select trim(leading 'x' from 'xxxxWORLDxxxx') aaaaa from dual;
    
    AAAAA
    ---------
    WORLDxxxx
    
           必须注意的一点是这里的“trim_character”参数只允许包含一个字符,不支持多字符。trim不能满足我们去除多字符要求,但是我们可以使用rtrim和ltrim来处理。
    1)使用rtrim
    
    SQL> select rtrim('ORxxxxWORLDxxxxOR','OR') aaaaa from dual;
    
    AAAAA
    ---------------
    ORxxxxWORLDxxxx
    2)使用ltrim
    
    SQL> select ltrim('ORxxxxWORLDxxxxOR','OR') aaaaa from dual;
    
    AAAAA
    ---------------
    xxxxWORLDxxxxOR
    3)联合使用RTRIM和LTRIM函数达到我们的目的
    SQL> select rtrim(ltrim('ORxxxxWORLDxxxxOR','OR'),'OR') aaaaa from dual;
    
    AAAAA
    -------------
    xxxxWORLDxxxx
    
    使用rtrim和ltrim函数时的注意事项:“OR”不表示整个“OR”字符串进行匹配,而是发现任意的字符“O”或字符“R”均做删除操作。
    
           对于trim函数的应用就介绍到,下面介绍一下replace函数,个人觉得replace函数在去空格时更好用。replace 函数用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。来看下replace函数的语法描述:replace('string_replace1','string_replace2','string_replace3')  
    
    'string_replace1' 待搜索的字符串表达式,string_replace1 可以是字符数据或二进制数据。
    
    'string_replace2' 待查找的字符串表达式,string_replace2 可以是字符数据或二进制数据。
    
    'string_replace3' 替换用的字符串表达式,string_replace3 可以是字符数据或二进制数据。
    
    返回类型,如果 string_replace(123)是支持的字符数据类型之一,则返回字符数据;如果 string_replace(123)是支持的 binary 数据类型之一,则返回二进制数据。
    
           这里我们依然以去空格为例。
    
    SQL> select replace('   aa  kk  ',' ','') abcd from dual;
    
    ABCD
    ----
    aakk
    
           与使用trim函数的结果进行对比,我们可以发现,使用replace函数不仅可以去除字符串两端的空格,也可去除字符串内部的空格。
    
           当然,如果只是要去除字符串两端的空格,使用trim函数效率会更高
    ----------------------------------------------------------------------
    
    TO_CHAR(数字)
    句法
    
    to_char_number :: =
    
    to_char_number.gif的描述如下
    图示说明to_char_number.gif
    
    目的
    
    TO_CHAR(数字)使用可选的数字格式转换n为VARCHAR2数据类型的值fmt。该值n可以是类型的NUMBER,BINARY_FLOAT或BINARY_DOUBLE。如果省略fmt,则n转换为VARCHAR2足够长的值以保存其有效数字。
    
    有关数字格式的信息,请参阅“格式模型”。
    
    该'nlsparam'参数指定由数字格式的元素返回这些字符:
    
    小数字符
    组分隔符
    当地的货币符号
    国际货币符号
    这个论点可以有这样的形式:
    
    'NLS_NUMERIC_CHARACTERS ='' dg ''
       NLS_CURRENCY ='' 文字 ''
       NLS_ISO_CURRENCY = 地区 '
    
    字符d和g表示十进制字符和组分隔,分别。它们必须是不同的单字节字符。在引用的字符串中,必须在参数值周围使用两个单引号。十个字符可用于货币符号。
    
    如果省略'nlsparam'或任何一个参数,则此函数使用会话的默认参数值。
    
    例子
    
    以下语句使用隐式转换将字符串和数字组合成一个数字:
    
    SELECT TO_CHAR('01110'+ 1FROM dual;
    
    TO_C
    ----
    1111
    
    将此示例与TO_CHAR(character)的第一个示例进行比较。
    
    在下一个示例中,输出在货币符号的左侧填充为空白。
    
    SELECT TO_CHAR(-10000'L99G999D99MI')“金额”
         FROM DUAL;
    
    量
    --------------
      $ 10,000.00-
    
    SELECT TO_CHAR(-10000'L99G999D99MI''NLS_NUMERIC_CHARACTERS ='',。''
       NLS_CURRENCY ='AusDollars''')“金额”
         FROM DUAL;
    
    量
    -------------------
    AusDollars10.000,00-
    
    在可选数字格式中fmt,L指定本地货币符号并MI指定尾部减号。有关数字格式元素的完整列表,请参阅表2-17“使用FX格式模型修改器匹配字符数据和格式模型”。
    
    ---------------------------------------------------------------------------------------------------------------------
    round(x[,y]) 
    【功能】返回四舍五入后的值 
    【参数】x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则四舍五入为y位小数,如果y小于0则四舍五入到小数点向左第y位。 
    【返回】数字 
    【示例】 select round(5555.6666,2.1),round(5555.6666,-2.6),round(5555.6666) from dual; 
    返回: 5555.67 , 5600 , 5556 
    【相近】trunc(x[,y]) 返回截取后的值,用法同round(x[,y]),只是不四舍五入 
    
    trunc(x[,y]) 
    【功能】返回x按精度y截取后的值 
    【参数】x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则截取到y位小数,如果y小于0则截取到小数点向左第y位,小数前其它数据用0表示。 
    【返回】数字 
    【示例】 select trunc(5555.66666,2.1),trunc(5555.66666,-2.6),trunc(5555.033333) from dual; 
    返回:5555.66 5500 5555 
    【相近】round(x[,y]) 返回截取后的值,用法同trunc(x[,y]),只是要做四舍五入
    
    
    
    
    decode的几种用法
    1:使用decode判断字符串是否一样
    DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
    含义为
    IF 条件=值1 THEN
        RETURN(value 1)
    ELSIF 条件=值2 THEN
        RETURN(value 2)
        ......
    ELSIF 条件=值n THEN
        RETURN(value 3)
    ELSE
        RETURN(default)
    END IF
    
    
    sql测试
    select empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum<=10
    输出结果
    7369 smith
    7499 allen
    7521 ward
    7566 jones
    7654 unknow
    7698 unknow
    7782 unknow
    7788 unknow
    7839 unknow
    7844 unknow
    
    
    
    
    2:使用decode比较大小
    select decode(sign(var1-var2),-1,var 1,var2) from dual
    sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
    sql测试
    select decode(sign(100-90),-1,100,90) from dual
    输出结果
    90
    100-90=10>0 则会返回1,所以decode函数最终取值为90
    反正
    select decode(sign(100-90),1,100,90) from dual
    输出结果
    100
    100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为100
    
    
    
    
    3:使用decode函数分段
    工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪
    sql测试
    SELECT 
        ename,sal,
        DECODE(SIGN(sal - 5000),
                1,
                'high sal',
                0,
                'high sal',
                - 1,
                DECODE(SIGN(sal - 3000),
                        1,
                        'mid sal',
                        0,
                        'mid sal',
                        - 1,
                        DECODE(SIGN(sal - 1000),
                                1,
                                'low sal',
                                0,
                                'low sal',
                                - 1,
                                'low sal')))
    FROM
        emp
    输出结果
    SMITH   800    low sal
    ALLEN 1600  low sal
    WARD 1250  low sal
    JONES 2975  low sal
    MARTIN 1250  low sal
    BLAKE   2850  low sal
    CLARK 2450  low sal
    SCOTT 3000  mid sal
    KING  5000  high sal
    TURNER 1500  low sal
    ADAMS 1100  low sal
    JAMES 950          low sal
    FORD 3000  mid sal
    MILLER 1300  low sal
    
    
    4:利用decode实现表或者试图的行列转换
    sql测试
    SELECT 
           SUM(DECODE(ENAME,'SMITH',SAL,0))  SMITH,
           SUM(DECODE(ENAME,'ALLEN',SAL,0))  ALLEN,
           SUM(DECODE(ENAME,'WARD',SAL,0))   WARD,
           SUM(DECODE(ENAME,'JONES',SAL,0))  JONES,
           SUM(DECODE(ENAME,'MARTIN',SAL,0)) MARTIN FROM EMP
    输出结果如下
    SMITH  ALLEN  WARD   JONES  MARTIN
      800  1600    1250       2975       1250
    
    
    5:使用decode函数来使用表达式来搜索字符串
    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
    decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
    sql测试
    SELECT 
        ENAME,
        SAL,
        DECODE(INSTR(ENAME, 'S'),
                0,
                '不含有s',
                '含有s') AS INFO
    FROM
        EMP
    输出结果
    SMITH 800            含有s
    ALLEN 1600    不含有s
    WARD 1250    不含有s
    JONES 2975     含有s
    MARTIN 1250     不含有s
    BLAKE 2850     不含有s
    CLARK 2450     不含有s
    SCOTT 3000    含有s
    KING 5000    不含有s
    TURNER 1500    不含有s
    ADAMS 1100    含有s
    JAMES 950             含有s
    FORD 3000    不含有s
    MILLER 1300    不含有s
    SELECT name, RPAD(' ', salary/1000/1, '*') "Salary"
     FROM student
     WHERE STUDENT.'id' = 3
     ORDER BY name;
    
    SELECT RTRIM('BROWNING: ./=./=./=./=./=.=','/=.') "RTRIM example" FROM DUAL--去除空格
    select trim('   11   ') aa from dual;
    SELECT name, TREAT(VALUE(p) AS dual).salary salary 
      FROM persons p;
    SELECT
    
    --nvl和nvl2 滤空函数
    SELECT sal*12工资,comm 奖金,sal*12+nvl(comm,0from emp;
    select sal*12工资,comm 奖金,sal*12+nvl2(comm,comm,0from emp;
    
    SELECT TO_CHAR(SYSDATE, 'Day DD Month YYYY') Today
     FROM DUAL;
     
    
    SELECT TO_CHAR('01110' + 1) FROM dual; --对数字的转换
    
    SELECT TO_CHAR(-10000,'L99G999D99MI') "Amount"
         FROM DUAL;
    CREATE TABLE date_tab(
       ts_col TIMESTAMP,
       tsltz_col TIMESTAMP,
       tstz_col TIMESTAMP WITH TIME ZONE);、
    
    commit
    INSERT INTO date_tab VALUESTIMESTAMP'1999-12-01 10:00:00'TIMESTAMP'1999-12-01 10:00:00'TIMESTAMP'1999-12-01 10:00:00');
    SELECT SESSIONTIMEZONE, 
       TO_CHAR(tsltz_col,'DD-MON-YYYY HH24:MI:SSxFF'FROM date_tab;
    
    1.Round():四舍五入
    select round(5555.6666,2.1),round(5555.6666,-2.6),round(5555.6666) from dual; 
    select trunc(5555.66666,2.1),trunc(5555.66666,-2.6),trunc(5555.033333) from dual; 
    
    select sum(DECODE(C810000125,'',1,0))/COUNT(1) 合格率 FROM t581 
    
    select decode(grand,'',1) from student
    select decode(sign(100-90),1,100,90) from dual
  • 相关阅读:
    Netsharp下微信菜单以及OAuth
    权限管理
    java面向对象基础(转)
    闲来无事做了一个批处理的win10账号管理
    bat获取系统时间修改系统密码
    bat常用命令
    bat修改密码
    vbs的一些入门基础。。。
    WCF 之 DataContract
    WCF 之 OperationContract
  • 原文地址:https://www.cnblogs.com/lcycn/p/8047975.html
Copyright © 2011-2022 走看看