SELECT语句
查询表中数据
SELECT字句后跟的是要查询的字段,可以包括表中的具体字段,函数或者表达式。
FROM字句用来指定表
WHERE添加过滤条件
SELECT name,job,salary
FROM myemp;
SELECT字句中使用表达式
SELECT name,job,salary*12
FROM myemp;
SELECT字句中使用函数
字符串函数
CONCAT()函数,用来连接字符串
SELECT CONCAT(name ,salary)
FROM myemp;
SELECT CONCAT((CONCAT(name ,','),salary)
FROM myemp;
SELECT name||','||salary
FROM myemp ;
LENGTH函数,查看字符串长度
SELECT name .LENGTH(name)
FROM myemp;
UPPER,LOWER,INITCAP
将字符串转换为全大写,全小写,以及首字母大写
伪表:dual
当查询的内容不和任何表中数据有关系时,可以使用伪表,伪表只会查询出一条记录。
SELECT UPPER('helloworld')
LOWER('HELLOWORLD')
INITCAP('hello world')
FROM dual;
TRIM,LTRIM,RTRIM
去除当前字符串中两边的指定重复字符,LTRIM仅去除左侧的,RTRIM仅去除右侧的。
SELECT TRIM('e'FROM'eeeliteee')
FROM dual;
SELECT LPAD(salary,5,' ')
FROM myemp;
SELECT RPAD(salary,5,' ')
FROM myemp;
SUBSTR 截取字符串(字符串下标从1开始)
第二个参数是截取的位置,可以是负数,表示从倒数第几个字符开始截取的。
第三个参数不指定时则是截取到末尾,指定的长度若超过实际可以截取的内容也是截取到末尾
SELECT SUBSTR('thinking in java',13,4)
FROM dual;
INSTR(char1,char2[,n,m])函数
查找char2在char1中的位置
n为第几个字符开始检索
m为第几次出现
n,m不写则默认为1
SELECT INSTR('thinking in java','in',4,2)
FROM dual;
数字函数
ROUND
SELECT ROUND(45.678,2)
FROM dual;
45.68
SELECT ROUND(45.678,0)
FROM dual;
46
SELECT ROUND(45.678,-1)
FROM dual;
50
TRUNC截取数字
SELECT TRUNC(45.678,2)
FROM dual;
45.67
SELECT TRUNC(45.678,0)
FROM dual;
45
SELECT TRUNC(45.678,-1)
FROM dual;
40
MOD(m,n) 求余数
m/n n为0 返回 m
SELECT name ,salary ,MOD(salary,1000)
FROM myemp;
CEIL(n)和FLOOR(n)
向上取整和向下取整
SELECT CEIL(45.678) FROM DUAL;
46
SELECT FLOOR(45.678) FROM DUAL;
45
日期操作
TIMESTAMP与DATE的不同TIMESTAMP在于精确到秒以下
CREATE TABLE test(
c1 DATE,
c2 TIMESTAMP
);
SYSDATE 当前系统时间返回的是DATE类型,
SYSTIMESTAMP返回的是时间戳类型的当前系统时间值
TO_DATE函数
可以将字符串按照给定日期格式解析为一个DATE类型的值
TO_DATE('2008-08-08 20:08:08','YYYY-MM-DD HH24:MI:SS')
FROM dual;
TO_DATE('2008年08月08 日20:08:08','YYYY"年"MM"月"DD "日"HH24:MI:SS')
FROM dual;
日期的计算
日期可以与一个数字进行加减法,这相当于加减指定的天
两个日期可以进行减法,差为相差的天
SELECT name ,SYSDATE-hiredate
FROM myemp;
TO_CHAR
可以将DATE按照给定格式转换为字符串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS)
FROM dual;
RR会判定具体哪年
TO_CHAR(TO_DATE('49-07-12','RR-MM-DD'),'YYYY-MM-DD')
LAST_DAY(DATE)
返回给定日期所在月的月底日期
SELECT LAST_DAY(SYSDATE)
FROM dual;
ADD_MONTHS(date,i)
对给定日期加上指定月,若i为负数则是减去。
SELECT name ,ADD_MONTHS(hiredate,12*20)
FROM myemp;
MONTHS_BETWEEN(date1,date2)
计算两个日期之间相差的月,计算是根据date1-date2得到的
SELECT name,MONTHS_BETWEEN(SYSDATE,hiredate)
FROM myemp;
NEXT_DAY(date,i)
返回给定日期的第二天开始一周之内的指定周几的日期
i:1表示周日,2表示周一
SELECT NEXT_DAY(SYSDATE,7)
FROM DUAL;
LEAST,GREATEST
求最大值与最小值,除了日期外,常用数字也可比较大小
SELECT(SYSDATE,TO_DATE(2008-08-05','YYYY-MM-DD'))
FROM DUAL;
EXTRACT()
提取给定日期中指定时间分量的值
SELECT EXTRACT(YEAR FROM SYSDATE)
FROM DUAL;
查看1980年入职的员工
SELECT name,hiredate
FROM emp
EXTRACT(YEAR FROM SYSDATE)=1980;
NULL值操作
NULL与任何数字运算结果还为null
NULL与字符串拼接等于什么也没干
NVL(arg1,arg2)
当arg1为null,函数返回arg2的值,若不为null,则返回arg1本身,所以该函数的作用是将null值替换为非空值。
SELECT name ,salary,comm,salary+NVL(comm,0)
FROM myemp;
NVL2(arg1,arg2,arg3)
当arg1不为null,则函数返回arg2
当arg1为null,则函数返回arg3
该函数是根据一个值是否为null来返回两个不同结果。
查看每个人的绩效情况,即:有绩效的,显示有绩效,绩效为null的显示没有绩效
SELECT name ,comm,NVL2(comm,'有奖金','没奖金')
FROM myemp;