Oracle单行函数以及日期计算的方式
单行函数
字符类型单行函数 LOWER(列名) UPPER(列名)
查找employees表last_name列中包含a(不区分大小写)员工的last_name SELECT LAST_NAME FROM EMPOLYEES WHERE UPPER(LAST_NAME) LIKE ‘%A%’; SUBSTR(列名,N)–从指定的位置开始截取字符串直到字符的末尾 SUBSTR(列名,N,M)–从指定的位置开始截取指定长度的字符串 SUBSTR(列名,-N)–从倒数第N位开始截取字符串,直到字符串的末尾 SUBSTR(列名,-N,M)–从倒数第N位开始截取指定长度的字符串 INSTR():在第一个参数中查找第二个参数首次出现的位置,没找到返回0
查找employees表中last_name包含a的员工的last_name SELECT LAST_NAME
FROM EMPLOYEES
WHERE INSTR(LAST_NAME,’a’)>0; LENGTH(‘中国’)–获得字符数 LENGTHB(‘中国’)–获得字节数 TRIM(‘zifu chuan’)–去掉字符串两端的空格 TRIM(‘z’ FROM ‘zzzifuchuanzzz’)–去掉字符串两端指定的字符 LPAD()/RPAD():显示第一个参数的值,使用第二个参数设置第一个参数显示的长度,如果第一个参数长度不足,使用第三个参数在第一个参数的左/右面补齐长度。 数字类型单行函数
ROUND():四舍五入 TRUNC():截取数字 MOD():取余数 日期类型单行函数 SYSDATE:获得数据库服务器当前日期+时间
Oracle中日期计算的方式
日期+天数=日期 日期-天数=日期 日期-日期=天数 日期不能加日期 MONTHS_BETWEEN():获得两个日期相差的月数 ADD_MONTHS():在指定的日期上加上N个月 类型转换单行函数
自动转换:效率低,不建议使用 手动转换:TO_CHAR(),TO_DATE(),TO_NUMBER()
字符串可以与日期相互转换 字符串可以与数字相互转换 数字与日期不能相互转换 TO_CHAR():
TO_CHAR(SYSDATE,’YYYY-MM-DD’)年月日 (SYSDATE,’YYYY-MM-DD HH24:MI:SS DAY DY’)年月日时分秒星期星期 TO_CHAR(HIRE_DATE,’FMYYYY”年”MM”月”DD”日”’):1994年10月22 日 TO_CHAR(SYSDATE,’D DD DDD’):D数字表示的周几,周日为1,依次类推,DD这个月的第几天,DDD这一年的第几天 TO_DATE(C,F):根据模板F将字符类型C转换为日期类型的值
TO_DATE(‘2017-10-1’,’YYYY-MM-DD’) TO_NUMBER(C,F):根据模板F将字符类型C转换为数字类型的值
TO_NUMBER(‘¥10,000.00’,’L99,999.00’) 通用单行函数
NVL():当地一个参数不为NULL,返回第一个参数,当第一个参数为NULL,返回第二个参数,两个参数类型必须一致 关系数据库中当算术运算中出现了NULL,结果一定为NULL NVL2():当第一个参数不为NULL,返回第二个参数。当第一个参数为NULL,返回第三个参数。 分支选择:CASE表达式,DECODE()函数。
CASE表达式:结果的类型必须保持一致,只能判断是否相等
查询employees表中所有员工的last_name,job_id,salary,新工资。如果job_id为IT_PROG时,工资增加10%。如果job_id为ST_CLERK时,工资增加15%。如果job_id为SA_REP时,工资增加20%,其它职位工资不变。 SELECT LAST_NAME,JOB_ID,SALARY,
CASE
WHEN JOB_ID=’IT_PROG’ THEN SALARY*1.1
WHEN JOB_ID=’ST_CLERK’ THEN SALARY*1.15
WHEN JOB_ID=’SA_REP’ THEN SALARY*1.2
ELSE SALARY
END AS 新工资
FROM EMPLOYEES; DECODE():只能判断是否相等
SELECT LAST_NAME,JOB_ID,SALARY,
DECODE(
JOB_ID,
‘IT_PROG’,SALARY*1.1,
‘ST_CLERK’,SALARY*1.15,
‘SA_REP’,SALARY*1.2,
SALARY
)AS 新工资
FROM EMPLOYEES; END