oracle 中函数的使用

-- oracle 中函数的使用--

-----------------------字符函数----------------------------

-- UPPER 函数,转换成大写
SELECT UPPER(TEST.TNAME)
FROM TEST;

-- LOSER 函数,转换成小写
SELECT LOWER(TEST.TNAME)
FROM TEST;

-- INITCAP 函数,将字符串中的单词的首字母转换成大写,其他字符转换成小写
SELECT INITCAP(TEST.TNAME)
FROM TEST;

-- CONCAT 函数, 将 字符串进行拼接然后显示。
SELECT CONCAT( TEST.TNAME , 'WU' ) "字符串拼接"
FROM TEST
WHERE TEST.TNAME = 'ZHANG';

SELECT TEST.TNAME || 'WU' "字符串拼接"
FROM TEST
WHERE TEST.TNAME = 'ZHANG';

-- SUBSTR 函数, 将 字符串进行截取
SELECT SUBSTR( TEST.TNAME, 1, 3 ) "字符串截取"
FROM TEST;

-- LENGTH 函数, 统计 字符串的长度
SELECT LENGTH( TEST.TNAME )
FROM TEST;

-- INSTR 函数, 统计 子字符串在字符串中第一次出现的位置
SELECT INSTR( TEST.TNAME, 'H' ) "第一次出现的位置"
FROM TEST;

SELECT INSTR( TEST.TNAME, 'ZH' )
FROM TEST;

-- LPAD 函数, 从最左边进行数据的拼接。
--函数规则 LPAD( "目标字符", 拼接之后的长度, 拼接的字符 )
/*如果拼接之后的长度,小于目标字符的长度,不进行拼接,只会从左截取目标字符相应长度的字符。
  如果拼接之后的长度,小于目标字符的长度,会重复的拼接,直到拼接之后的字符长度满足要求。
  如果拼接字符没有填写,默认在目标字符最左边添加空串。*/
SELECT LPAD( TEST.TNAME, 13, '1' )
FROM TEST;

-- RPAD 函数, 从最右边进行数据的拼接
SELECT RPAD( TEST.TNAME, 18, '123' )
FROM TEST;

-- TRIM 函数,
SELECT TRIM( TEST.TNAME ) "去掉首尾空格"
FROM TEST;

-- REPLACE 函数, 替换目标字符串中出现的所有的字符
-- 语法规则:REPLACE( 目标字符串,被替换的字符,替换字符 ),会替换目标字符串中出现的所有的字符。
SELECT REPLACE( TEST.TNAME, 'g' ,'G')
FROM TEST;

 


---------------     数值型函数        ----------------

-- ROUND函数,四舍五入,可以精确小数位数

SELECT ROUND( TEST.AGE /3 ,2 )FROM TEST;

-- TRUNC函数,直接截取到相应的小数位数,不进行四舍五入运算
SELECT TRUNC( TEST.AGE / 3 , 2 )
FROM TEST;

-- FLOOR函数, 向下取整
SELECT FLOOR( TEST.AGE / 3)
FROM TEST;

-- MOD函数,返回算数运算后的余数. 规则: MOD(被除数,除数)
SELECT MOD( TEST.AGE , 3 )
FROM TEST;

 

-- ----------------------- 日期类型的函数 ------------------------

-- 获取系统当前时间
SELECT SYSDATE
FROM TEST;

-- 获取系统时间后一天的时间
SELECT SYSDATE + 1
FROM TEST;

-- 获取系统时间前一天的时间
SELECT SYSDATE - 1
FROM TEST;

-- 获取系统时间 与 某一个时间点间隔多少天
SELECT SYSDATE - TEST.HIREDATE
FROM TEST;

-- MONTHS_BETWEEN 两个时间点间隔几个月
SELECT MONTHS_BETWEEN(SYSDATE, TEST.HIREDATE)
FROM TEST;

-- ADD_MONTHS 在一个时间点上增加几个月或者减少几个月
SELECT ADD_MONTHS( SYSDATE, -1 )
FROM TEST;

SELECT ADD_MONTHS( SYSDATE, 1 )
FROM TEST;

-- LAST_DAY 指定日期的所在月的最后的一天的日期
SELECT LAST_DAY(SYSDATE)
FROM TEST;


-- EXTRACT 获取到指定日期的年,月,日。这些具体信息
/*
   语法:EXTRACT( YEAR FROM 目标日期 )    目标日期的年份
         EXTRACT( MONTH FROM 目标日期 )   目标日期的月份
         EXTRACT( DAR FROM 目标日期 )    目标日期的所在天
*/

SELECT EMP.ENAME,
       EXTRACT(YEAR FROM EMP.HIREDATE) "年",
       EXTRACT(MONTH FROM EMP.HIREDATE) "月",
       EXTRACT(DAY FROM EMP.HIREDATE) "日"
FROM EMP;

 

-------------------------------  转换函数 ---------------------------

-- TO_CHAR(date, 格式) 函数。将日期格式的数据转换成字符串。
SELECT EMP.HIREDATE "日期格式数据", TO_CHAR( EMP.HIREDATE, 'YYYY-MM-DD HH24:MI:SS ' )
FROM EMP ;

-- TO_DATE( char, 格式 ) 函数。将字符格式转换成日期格式。
SELECT TO_DATE( '02-12月-1993' ) FROM EMP; -- 不指定固定格式的日期转换,字符串日期形式需满足 *(日)-*月-*(年)
SELECT TO_DATE( '1993-12-02','YYYY-MM-DD' ) FROM EMP; -- 指定格式的日期形式转换。
INSERT INTO EMP(EMP.EMPNO, EMP.HIREDATE)
VALUES('8996', TO_DATE( '1993-12-02 12:24:00','YYYY-MM-DD HH24:MI:SS' ) );
SELECT * FROM EMP;

 

-- TO_CHAR(number, 格式) 函数。将数字转换成字符串
SELECT TEST.SAL FROM TEST;
/**
*  将数字转换成 特定的字符串。
*  L 代表前面加上一个本地的货币符。
*  9 代表显示数字,如果没有数字则不显示,有数字的话,显示数字。
*  , 代表千分分割符。
*  . 代表小数点分割符,后面有多少个数字9,代表有多少个小数。
*  0 代笔有数字则显示数字,如果没有数字,则强制显示为0。
*/
SELECT TEST.SAL ,TO_CHAR(TEST.SAL,'L999,999.999') FROM TEST;
SELECT TEST.SAL ,TO_CHAR(TEST.SAL,'L000,000.000') FROM TEST;
SELECT TEST.SAL ,TO_CHAR(TEST.SAL,'$999,999.999') FROM TEST;

 

-- TO_NUMBER(CHAR, 格式)。将字符串转换成数字
INSERT INTO EMP(EMP.EMPNO, EMP.SAL) VALUES(8997,TO_NUMBER('8997')) ;
INSERT INTO EMP(EMP.EMPNO, EMP.SAL) VALUES(9000,TO_NUMBER('$8,997.01','$9,999.00')) ;

 

 

-----------------------------   其他函数处理   --------------------------------------

INSERT INTO EMP(EMP.EMPNO) VALUES(8995);
SELECT * FROM EMP;

-- NVL(字段,代替值) 。将null值替换。
SELECT NVL(EMP.COMM, 0) FROM EMP WHERE EMP.EMPNO = '8995';
SELECT NVL(EMP.JOB, '') FROM EMP WHERE EMP.EMPNO = '8995';
SELECT NVL(EMP.HIREDATE, '') FROM EMP WHERE EMP.EMPNO = '8995';


-- NVL2(字段,值1,值2)。 如果字段的值不为null,则返回值1,如果为null,则返回值2。
SELECT NVL2(COMM, 100, 0) FROM EMP;
SELECT COMM FROM EMP;

-- NULLIF(表达式1,表达式2)。 比较两个表达式,如果两个表达式的值相等,则返回空值;
-- 如果两个表达式的值不相等,则返回 表达式1。
SELECT NULLIF( LENGTH(EMP.ENAME), 5 ) FROM EMP;


-- CASE 表达式。 可以实现 java逻辑上面的if(){} else{}

/* CASE expr
   WHEN comparison_expr1 THEN return_expr1   expr1表达式和case后面的expr表达式相同,执行THEN 之后的表达式
   [
     WHEN comparison_expr2 THEN return_expr2
     WHEN comparison_exprn THEN return_exprn
     ELSE else_expr
   ]
   END
*/
SELECT * FROM EMP;
SELECT EMP.ENAME ,  EMP.SAL,
       CASE EMP.ENAME
       WHEN 'SMITH' THEN EMP.SAL * (1+0.2)
       WHEN 'ALLEN' THEN EMP.SAL * (1.5)
       ELSE EMP.SAL
       END AS "涨工资后"
FROM EMP
WHERE EMP.EMPNO BETWEEN 7369 AND 7782;

-- DECODE()  函数功能类似于CASE
/*
   DECODE(col/expression, search1, result1  col或者expression的值与 search的值相同的话,执行result;
     [, search2, result2,...,]              否则执行default后面的语句。
     [, default])
*/
SELECT * FROM EMP;
SELECT EMP.EMPNO, EMP.SAL, EMP.JOB,
DECODE(EMP.JOB, 'CLERK', EMP.SAL * 1.2,
    'SALESMAN', EMP.SAL * 1.5,
    EMP.SAL
) AS "修正后的工资"
FROM EMP;

 

posted @ 2018-11-25 23:03  Java半路人生  阅读(416)  评论(0编辑  收藏  举报