SELECT *
FROM EMP
WHERE ENAME=UPPER('smith'); --将小写转换为大写,LOWER将大写转换为小写
SELECT ENAME 原始姓名,REPLACE(ENAME,'A','_')FROM EMP; --将ENAME中的A替换成_
SELECT *
FROM EMP
WHERE LENGTH(ENAME)=5; --姓名长度为5的显示
SELECT *
FROM EMP
WHERE SUBSTR(ENAME,1,3)='JAM'; --截取ENAME前三个为JAM的内容显示
SELECT ENAME 原始姓名,SUBSTR(ENAME,3) --截取从第三个开始往后的字母
FROM EMP
WHERE DEPTNO=10;
SELECT ENAME 原始姓名,SUBSTR(ENAME,-3) --截取后三个字母
FROM EMP
WHERE DEPTNO=10;
SELECT CHR(65),ASCII('L') --实现字符与ASCII码的转换
FROM DUAL;
SELECT ' MLDN LICONGCONG '原始字符串,LTRIM(' MLDN LICONGCONG ')去掉左空格
FROM DUAL;
SELECT ' MLDN LICONGCONG '原始字符串,RTRIM(' MLDN LICONGCONG ')去掉右空格
FROM DUAL;
SELECT ' MLDN LICONGCONG '原始字符串,TRIM(' MLDN LICONGCONG ')去掉左右空格
FROM DUAL;
SELECT LPAD('MLDN',10,'*')LPAD函数使用 --将MLDN左边添加6个'*'
FROM DUAL;
SELECT RPAD('MLDN',10,'*')LPAD函数使用 --将MLDN右边添加6个'*'
FROM DUAL;
SELECT
INSTR('MLDN java','MLDN') 查找得到,
INSTR('MLDN java','java') 查找得到,
INSTR('MLDN java','JAVA') 未查找到
FROM DUAL;
SELECT
ROUND(789.452)不保留小数,
ROUND(789.452,2)保留2位小数, --ROUND进行四舍五入
ROUND(749.452,-2)处理整数进位
FROM DUAL;
SELECT EMPNO,ENAME,SAL*12年工资,ROUND(SAL/30,2)平均日工资
FROM EMP;
SELECT
TRUNC(789.452)去掉小数,
TRUNC(789.452,2)截取2位小数, --TRUNC不进行四舍五入
TRUNC(749.452,-1)截取整数
FROM DUAL;
SELECT MOD(10,3)
FROM DUAL;
SELECT SYSDATE FROM DUAL; --获取年月日
ALTER SESSION SETNLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'; --通过这样设置,可以具体到秒
SELECT
SYSDATE+3三天之后的日期, --日期+数字=日期
SYSDATE-3三天以前的日期 --日期-数字=日期
FROM DUAL;
SELECT EMPNO 雇员编号,ENAME雇员姓名,TRUNC(SYSDATE-HIREDATE) 雇佣天数 --日期-日期=数字
FROM EMP;
SELECT SYSDATE,
ADD_MONTHS(SYSDATE,3) 三个月之后的日期,
ADD_MONTHS(SYSDATE,-3) 三个月之前的日期
FROM DUAL;
SELECT SYSDATE,
NEXT_DAY(SYSDATE,'星期二') 下一个星期二,
NEXT_DAY(SYSDATE,'星期日') 下一个星期日 --求下一个指定日期
FROM DUAL;
SELECT SYSDATE,LAST_DAY(SYSDATE) --查询当前日期所在月的最后一天
FROM DUAL;
SELECT
EMPNO 雇员编号,ENAME 雇员姓名,HIREDATE雇用日期,
TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)) 雇佣总月数,
TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) 雇佣总年数
FROM EMP;
SELECT SYSDATE 当前系统时间,
TO_CHAR(SYSDATE,'YYYY-MM-DD') 格式化日期, --格式化函数
TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') 格式化日期时间,
TO_CHAR(SYSDATE,'FMYYYY-MM-DDHH24:MI:SS') 去掉前导0 --FM去掉前导0
FROM DUAL;
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'MM')='02';
SELECT EMPNO,ENAME,
TO_CHAR(HIREDATE,'YYYY') 年,
TO_CHAR(HIREDATE,'MM') 月,
TO_CHAR(HIREDATE,'DD') 日
FROM EMP;
SELECT
TO_NUMBER('19')+TO_NUMBER('09') 加法操作, --将字符串转换为数字
TO_NUMBER('19')*TO_NUMBER('09') 乘法操作
FROM DUAL;
SELECT
'19'+'09' 加法操作, --oracle支持自动转换
'19'*'09' 乘法操作
FROM DUAL;
SELECT NVL(NULL,0),NVL(3,0) --如果为NULL,就变为0,否则还是原来的
FROM DUAL;
SELECT EMPNO,ENAME,JOB,HIREDATE,(SAL+NVL(COMM,0))*12年工资
FROM EMP;
SELECTEMPNO,ENAME,JOB,HIREDATE,NVL2(COMM,SAL+COMM,SAL)*12 年工资 --如果COMM为NULL则返回SAL,否则就返回SAL BUL+COMM
FROM EMP;
SELECT NULLIF(1,1),NULLIF(3,4) --相等则返回空,不等则返回左边的数
FROM DUAL;
SELECT
DECODE(2,1,'内容为1',2,'内容为2',3,'内容为3','没有满足条件') 判断1, --类似if...else if...else
DECODE(3,1,'内容为1',2,'内容为2',3,'内容为3','没有满足条件') 判断2,
DECODE(5,1,'内容为1',2,'内容为2',3,'内容为3','没有满足条件') 判断3
FROM DUAL;
SELECT ENAME,SAL,
DECODE(JOB,'CLERK','业务员','SALESMAN','销售人员','MANAGER','经理','ANALYST','分析员','PRESIDENT','总裁') JOB --必须都要判断
FROM EMP;
SELECT ENAME,SAL,
CASE JOB WHEN 'CLERK' THEN SAL*1.1
WHEN 'SALESMAN' THEN SAL*1.2
WHEN 'MANAGER' THEN SAL*1.3
ELSE
SAL*1.5
END新工资
FROM EMP;
SELECT ENAME,COMM,
COALESCE(COMM,100,1000),COALESCE(COMM,NULL,NULL) --COALESCE(表达式1,表达式2,表达式3,,...表达式N)若表达式1为空
FROM EMP; --则执行表达式2,若表达式2为空,则执行表达式3,若都为空,则显示NULL
SELECT COUNT(*) FROM EMP; --统计有多少记录