大小写控制函数
--LOWER/UPPER/INITCAP
--例1:将查到的列的字符串全部转换成小写输出
SELECTLOWER(last_name)
FROM employees;
--例2:将将查到的列的字符串全部转换成大写输出
SELECT UPPER(last_name)
FROM employees;
--例3:将每个字符串的首字母变为大写
SELECT INITCAP('last_name HELLOdog')
FROM dual;
字符控制函数
--CONCAT/LPAD/RPAD
--例1:链接字符串
SELECT first_name ||''|| last_name AS fullname
FROM employees;
-------------------------------------------
SELECT CONCAT(first_name,CONCAT('',last_name)) AS fullname
FROMemployees;
--例2:在检索到的结果前循环加上第三个参数所表示字符串
--第二个参数为输出字符串长度,若参数1得长度大于限制从右边舍去
SELECT LPAD(employee_id,8,'123')
FROMemployees;
-------------------------------
--在检索到的结果后循环加上第三个参数所表示字符串
--第二个参数为输出字符串长度,若参数1得长度大于限制从右边舍去
SELECT RPAD(employee_id,2,'123')
FROM employees;
--SUBSTR
--1:(使用2个参数)从第二个参数所表示的值开始截取字符串
SELECT SUBSTR('ABC D1234 234 NARS na',4)
FROM dual;
SELECT SUBSTR(last_name,4),last_name
FROM employees;
--INSTR
--例1:查找第二参数的首字母在第一个参数中的位置
--若不匹配,则返回0
SELECT INSTR('SQL allowsfor dynamic DB changes','all')
FROM dual;
--指定起始位置(只返回按要求第一次出现位置)
SELECT INSTR('SQL allowsfor dynamic DB changes','a',6)
FROM dual;
--指定起始位置并指明第几次出现
SELECT INSTR('SQL allowsfor dynamic DB changes','a',6,2)
FROM dual;
--5)TRIM
--例1:去掉字符串两端空格
SELECT TRIM(' VFBAPSTAK ')
FROM dual;
--例2:去掉字符串前端指定的字符
SELECT TRIM(LEADING'A'FROM'AAABA VFBAPSTAK ')
FROM dual;
--例3:去掉字符串末端指定的字符
SELECTTRIM(TRAILING'A'FROM'AAABA VFBAPSTAK ABAA')
FROM dual;
--例4:去掉字符串两端指定的字符
SELECTTRIM('A'FROM'AAABA VFBAPSTAK ABAA')
FROM dual;
--6)REPLACE
--例1:用第三个参数替换第二个参数
SELECTREPLACE('SQL*PLUS supports loops or if statements.',
'supports',
'does notsupport')
FROM dual;
--7)LENGTH
--例1:统计参数字符串长度
SELECTLENGTH('SQL lets you supports loops orif statements.'
)
FROM dual;
数字函数
--1)ROUND/TRUNC
--例1:保留参数2所表示的有效位小数,TRUNC不四舍五入
SELECTROUND(168.888,2),TRUNC(168.888,2)
FROM dual;
------------------------
SELECTROUND(168.888,0),TRUNC(168.888,0)
FROM dual;
-----------------
--无参数取整
SELECTROUND(168.888),TRUNC(168.888)
FROM dual;
---------
--从个位开始取0运算
SELECTROUND(168.888,-2),TRUNC(168.888,-2)
FROM dual;
--2)MOD
--例:求余运算
SELECT MOD(9,4)
FROM dual;
--3)CEIL/FLOOR
--例:向上向下取整
SELECTCEIL(34.5),FLOOR(34.5)
FROM dual;
日期函数
-- 1)SYSDATE
--例:查询当前系统时间
SELECT SYSDATE
FROM dual;
--Oracle默认日期格式:DD-MON-YY
--例2:7天后的日期
SELECT SYSDATE + 7
FROM dual;
--例3:100小时之后的时间
SELECT SYSDATE + 100/24
FROM dual;
--2)MONTHS_BETWEEN
--例1:计算两个日期之间相隔几个月
SELECTMONTHS_BETWEEN('01-12月-2010','31-1月-2010')
FROM dual;
--3)ADD_MONTHS
--例:在指定日期后加上参数二指定的月份
SELECTADD_MONTHS(SYSDATE,3)
FROM dual;
--4)NEXT_DAY
--例:当前日期之后的星期一
SELECT NEXT_DAY(SYSDATE,'星期一')
FROM dual;
--系统时间为中文
SELECTNEXT_DAY(SYSDATE,'MONDAY')
FROM dual;
-------------------------
SELECTNEXT_DAY(SYSDATE,'MON')
FROM dual;
--系统时间为英文
SELECTNEXT_DAY(SYSDATE,'1')
FROM dual;
--使用数字,1代表周日
--5)LAST_DAY
--例:返回当前月份的最后一天
SELECT LAST_DAY(SYSDATE)
FROM dual;
字符串。数字和日期之间的转换函数
--准备:
--Oracle日期类型DATE数据的内部存储格式:世纪、年。月。日。时。分。秒
--日期的缺省输入和输出的格式:DD-MON-RR
--1)TO_CHAR
--例1:以默认日期格式输出:DD-MON-RR
SELECTfirst_name,last_name,TO_CHAR(hire_date)
FROM employees;
--例2:
SELECT first_name,last_name,
TO_CHAR(hire_date,'YYYY-MM-DDDY HH24:MI:SS')
FROM employees;
--第一个参数必须是日期类型,不能是以字符串形式表示的日期直接量
--格式描述:
--年:YYYY、YY、RR
--月:MM、MON、MONTH
--日:DD
--星期:DY、DAY
--小时:HH24、HH
--分:MI
--秒:SS
--例3:借助TO_CHAR函数获取日期中存储的特殊值
SELECTTO_CHAR(SYSDATE,'DY')
FROM dual;
--例4:(数值格式化)
SELECTfirst_name,last_name,TO_CHAR(salary*1.6,'$999,999.99')
FROM employees;
--格式描述
/*
9:一位数字
0:一位数字,但会保留前导0
$:显示美元符号
L:显示本地货币符号
.:显示小数点
,:显示千分位
*/
--2)TO_DATE
--例1:使用缺省格式化描述
SELECT TO_DATE('03-9月-1975')
FROM dual;
--尽管默认格式年时2位,但在函数可以使用4为的年
--例2:指定格式化描述
SELECTTO_DATE('07.04.75','MM.DD.YY')
FROM dual;
----------------------
SELECTTO_DATE('05-FEB-1998 19:36:36','DD.MON.YYYY HH24:MI:SS')
FROM dual;
--例3:YY与RR的区别
SELECTTO_DATE(TO_CHAR('03-09-98','DD.MM.YY'),'DD-MM-YYYY')
FROM dual;
----------------------
SELECT TO_DATE(TO_CHAR('03-09-98','DD.MM.RR'),'DD-MM-YYYY')
FROM dual;
--3)TO_NUMBER 将字符串解析成数值
--例1:
SELECTTO_MUNBER('$12,345.69','$99,999.99')
FROM dual;
.ROUND和TRUNC用于日期
--1)ROUND函数:
--例1:对星期进行计算
SELECTROUND(TO_DATE('16-2月-2011','DAY')
FROM dual;
/*
第一个参数必须是DATE类型,如果是日期直接量必须使用TO_DATE函数转换
如果是周日到周三,结果为这个星期的第一天,否则为下个星期的第一天(1为周日)
*/
--例2:对月份进行计算
SELECTROUND(TO_DATE('16-10月-2010','MONTH')
FROMdual;
/*
如果是1~15日,结果为当月的第一天
否则为下个月的第一天
*/
--例3:对年份进行计算
SELECTROUND(TO_DATE('16-10月-2010','YEAR')
FROMdual;
/*
如果是1~6月,结果为但年的第一天,
否则为下一年的第一天
*/
--2)TRUNC函数
--例1:对象星期进行TRUNC计算,求这个星期的第一天
SELECTTRUNC(TO_DATE('3-MAR-2010'),'DAY')
FROM dual;
--例2:对象月进行TRUNC计算,求这个月第一天
SELECTTRUNC(TO_DATE('3-MAR-2010'),'MONTH')
FROM daul;
--例3:对象年进行TRUNC计算,求这一年的第一天
SELECTTRUNC(TO_DATE('3-MAR-2010'),'YEAR')
FROM daul;
DECODE函数
--例:
SELECTfirst_name,last_name,job_id,salary,
DECODE(
job_id,
'IT_PROG',salary*2,
'ST_CLERK',salary*1.2,
salary*1.1
) AS new_salary
FROM employees
ORDER BY job_id;
CASE表达式
--例1:
SELECTfirst_name,last_name,job_id,salary,
CASE job_id
WHEN 'IT_PROG'THEN salary*2
WHEN'ST_CLERK' THEN salary*1.2
ELSE salary*1.1
END AS new_salary
FROM employees
ORDER BY job_id;
--例2:搜索CASE表达式
SELECTfirst_name,last_name,job_id,salary,
CASE
WHEN job_id ='IT_PROG' THEN salary*2
WHEN job_id ='ST_CLERK' THEN salary*1.2
ELSE salary*1.1
END AS new_salary
FROM employees
ORDER BY job_id;