我爱编程

Oracle_SQL函数-单行函数

2016-06-19  本文已影响183人  MPPC

SQL函数

SQL函数分类

两种SQL函数

单行函数

单行函数

字符函数

字符函数
大小写控制函数 :这类函数改变字符的大小写
 SELECT 'helloworld Java',
        LOWER('helloworld Java') AS "Lower Last_Name",
        UPPER('helloWorld Java') AS "UPper Last_name",
        INITCAP('helloWorld Java') AS "InitCap Last_Name"
FROM dual
大小写控制函数
字符控制函数
字符控制函数的种类
SELECT CONCAT('Hello', ' World!') FROM  dual
SELECT SUBSTR('abcdefgh',2,4) FROM dual;
结果
SELECT LENGTH('HelloWorld!'),INSTR('HelloWorld!','W') FROM dual;
结果
SELECT salary,LPAD(salary,10,'*'),RPAD(salary,10,'*') FROM employees;
LPAD,RPAD
SELECT TRIM('H' FROM 'HelloHWorldHH') FROM dual;
SELECT TRIM('  HelloHWorldHH   ') FROM dual;
去除特定字符 去除空格
SELECT REPLACE('abcdabcdabcd','a','m') FROM dual
字符串替换函数

数值函数

SELECT ROUND(45.923,2),ROUND(45.923,0),ROUND(45.923,-1) FROM dual
四舍五入
SELECT TRUNC(45.923,2),TRUNC(45.923,0),TRUNC(45.923,-1) FROM dual
截断函数
SELECT salary, MOD(salary,1000) AS Mod_Salary FROM employees;
Mod求余函数

日期函数

SELECT last_name,(SYSDATE-hire_date)/7 AS Weeks
FROM employees
WHERE department_id = 90
函数 描述
MONTHS_BETWEEN 两个日期相差的月数
ADD_MONTHS 向指定日期中加上若干个月数
NEXT_DAY 指定日期的下一个星期所对应的日期
LAST_DAY 本月的最后一天
ROUND 日期四舍五入
TRUNC 日期截断
yyyy  年、 mm   月、dd   日
hh   小时、 mi  分钟、ss 秒
day  星期      
SELECT MONTHS_BETWEEN(SYSDATE+30,SYSDATE),
       ADD_MONTHS(SYSDATE,2),
       NEXT_DAY(SYSDATE,'星期四'),
       LAST_DAY(SYSDATE),
       ROUND(SYSDATE,'mm'),ROUND(SYSDATE,'yyyy'), 
       TRUNC(SYSDATE,'mm'),TRUNC(SYSDATE,'yyyy')
FROM dual;

转换函数

隐式数据类型转换
源数据类型 目标数据类型
VARCHAR2 or CHAR NUMBER
VARCHAR2 or CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2
DATE <---> VARCHAR2 <---> NUMBER
显式的数据类型转换
select TO_CAHR(SYSDATE,'yyyy-MM-dd hh:mm:dd day') from dual
Model View
YYYY 2016
YEAR twenty sixteen
MM 06
MONTH 6月(根据本地显示) 或者June
MON 6月(根据本地显示) 或者Jun
DY 星期六 或者 SATURDAY
DAY 星期六 或者 SAT
DD 18
HH:MI:SS AM         02:06:18 下午
HH24:MI:SS          14:06:18 
-- DD "of" MONTH    18 of 6月 
select to_char(sysdate,'DD "of" MONTH') from dual
SELECT TO_DATE('2016年06月18日 14:31:35','yyyy"年"mm"月"dd"日"hh24:mi:ss')
From dual
SELECT TO_CHAR(salary, '$999,999.00') SALARY
FROM   employees
WHERE  last_name = 'Ernst';

SELECT TO_CHAR(salary, '$000,000.00') SALARY
FROM   employees
WHERE  last_name = 'Ernst';
SELECT TO_NUMBER('¥1,234,567,890.00','L999,999,999,999.99')
FROM dual

通用函数

SELECT last_name,  salary, commission_pct,
       NVL2(commission_pct, 
            'SAL+COMM', 'SAL') income
FROM  employees 
WHERE department_id IN (50, 80);
SELECT first_name, LENGTH(first_name) "expr1", 
       last_name,  LENGTH(last_name)  "expr2",
       NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM   employees;
-- 如果commision_pct 为空,返回salary,如果salary还为空就返回10.  

SELECT   last_name,
         COALESCE(commission_pct, salary, 10) comm
FROM     employees
ORDER BY commission_pct;
CASE expr WHEN comparison_expr1 THEN return_expr1
         [WHEN comparison_expr2 THEN return_expr2
          WHEN comparison_exprn THEN return_exprn
          ELSE else_expr]
END
-- 练习:查询部门号为 10, 20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数
SELECT employee_id,last_name,department_id,salary,
       CASE department_id WHEN 10 THEN salary*1.1
                          WHEN 20 THEN salary*1.2
                          WHEN 30 THEN salary*1.3
                          ELSE salary
       END AS "new_salary"
FROM employees
WHERE department_id in (10,20,30)
DECODE(col|expression, search1, result1 ,
               [, search2, result2,...,]
               [, default])
-- DECODE版本
SELECT employee_id,last_name,department_id,salary,
       DECODE (department_id,10, salary*1.1,
                             20, salary*1.2,
                             30, salary*1.3,
                             salary) AS "new_salary"
FROM employees
WHERE department_id in (10,20,30)

嵌套函数

上一篇 下一篇

猜你喜欢

热点阅读