创建
查询
四则运算
DUAL虚拟表
条件查询
比较运算符 where + 大于小于等于.....
逻辑运算符 and / or
特殊运算符 null / not null
between:
//查询工资在1500-3000的员工
SELECT * FROM EMP
WHERE SEL BETWEEN 1500 AND 3000;
//不在
WHERE SEL NOT BETWEEN 1500 AND 3000;
备注:日期格式为:DATA‘1999-01-01’
中间无空格连接。
指定范围查询
WHERE 变量 IN (集合A);
LIKE 模糊匹配
_ _表示一个字符。
%表示多个字符
查询NAME中包括S的信息:
WHERE ENAME LIKE ‘%s%’
查询NAME最后一位是S的信息:
WHERE ENAME LIKE ‘%s’
单行函数-字符函数
ASCII()
后面可加字符串,数值,输出内容为对应的ASCII码。
SELECT ASCII('A') FROM DUAL;
CHR返回字符
语法:
CHR(ASCII)
SELECT CHR(65) FROM DUAL;
输出内容为ADCII码对应的字符。相当于和ASCII相逆。
CONCAT 拼接
上述的 || 拼接相当于字符串拼接。
语法:
CONCAT(字段|字符串,字符串|字段)
SELECT ENAME,EMPNO,JOB
FROM EMP
SELECT ENAME||EMPNO||JOB
FROM EMP
SELECT CONCAT(CONCAT(ENAME,EMPNO),JOB)
FROM EMP
//备注:CONCAT进行链接的时候只能进行双列拼接。
//若是想拼接多列,可使用嵌套进行大娃套小娃实现。
INITCAP -首字母大写
语法:INITCAP(字段|字符串)
SELECT ENAME,INITCAP(ENAME)
FROM EMP
UPPER -所有的字母全部转换大写。语法同上述相同。
LOWER -转小写
TRIM -删除字符串左右两侧的空格。
备注:此种方法不可删除字符串中间的空格。比如Jim Kim[人名]。
SELECT TRIM(LEADING 'A' FROM 'AAAAAfjfelAAAAA') FROM DUAL
SELECT TRIM(TRAILING 'A'FROM 'AAAAAfjfelAAAAA')FROM DUAL
SELECT TRIM(LEADING TRAILING BOTH 'A' FROM 'AAAAAfjfelAAAAA') FROM DUAL
SELECT TRIM(BOTH 'A' FROM 'AAAAAfjfelAAAAA') FROM DUAL
SELECT TRIM('A' FROM 'AAAAAfjfelAAAAA') FROM DUAL
//备注:3,4,5条相同。
LTRIM -删除左手边的空格/字符。
SELECT LTRIM('AAAAAfjfelAAAAA') FROM DUAL
SELECT LTRIM('AAAAAfjfelAAAAA','A') FROM DUAL
RTRIM -删除右手边的空格/字符。
同上
INSTR -查找字符所在位置
语法:INSTR(字符串,要查找的字符,从第X位开始找,查找第X次出现)
SELECT ENAME INSTR(ENAME,'A','1','1')
FROM EMP
SELECT ENAME INSTR(ENAME,'A')
FROM EMP
//若后二都是1,可以省略。
//若最后1是1的话,可以省略。
SUBSTR -截取
语法:SUBSTR(Stirng,从第x位开截,截X个)
备注:包括第X位置的那个。
SELECT ENAME SUBSTR(ENAME,'1','3')
FROM EMP
截取最后三位:
SELECT ENAME SUBSTR(ENAME,'-3')
若第三个参数不添加,则默认截取至最后。
LENGTH -返回字符的长度。字符:&……¥
LENGTHB -返回字节的长度。字节:单位
语法:LENGHTH(字段|字符串)
LENGTHB()
*lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 对于单字节字符,LENGTHB和LENGTH是一样的. 如可以用length(‘string’)=lengthb(‘string’)判断字符串是否含有中文。 注: 一个汉字在Oracle数据库里占多少字节跟数据库的字符集有关,UTF8时,长度为三。 select lengthb(‘飘’) from dual 可查询汉字在Oracle数据库里占多少字节 *
LPAD:左填充
语法:LPAD(字段|字符串,需要的长度,填充内容)
备注:需要添加的内容是字符串。且需要的长度也使用引号。
SELECT
JOB,
LPAD(JOB,'8','@')
FROM EMP
RPAD:右填充
同上述相同。
REPLACE -整体替换删除
语法:REPLACE(字符串,旧内容,新内容)
若不添加新内容则只会删除旧内容。
SELECT REPLACE('ASDASDASDASDASDSAD','AS')
SELECT
ENAME,
SUBSTR(ENAME,'1',LENGTH)
TRANSLATE -单个替换删除
语法:TRANSLATE(字符串,旧内容,新内容)
比如以下语句:
SELECT TRANSLATE('ASDASDASDASD','A','!') FROM DUAL
SLELECT TRANSLATE('qwqweefw232fdsa','1234567890'||'1234567890')
SELECT
TRANSLATE(STREET_ADDRESS,'qwertyuiopasdfghjklzxcvbnm'||'qwertyuiopasdfghjklzxcvbnm')
FROM LOCATION
select
translate
(STREET_ADDRESS,'qwertyuiopasdfghjklzxcvb0'||STREET_ADDRESS,'qwertyuiopasdfghjklzxcvb0')
--TRANSLATE(字符串,旧内容,新内容)
from LOCATIONS;
SELECT
STREET_ADDRESS
FROM LOCATIONS
WHERE
数值函数
ACOS -反余弦函数
语法:ACOS(数值)-返回值的反余弦。
反余弦的参数范围在1~-1之间,超出则报错。
COS --余弦函数。
POWER --次幂
POWER(N1,N2)
返回N1的N2次方。
SQRT -平方根
ABS - 绝对值
MOD -余数
语法MOD(EMPNO,’2‘)
FLOOR -向下取整
FLOOR(数值)
CEIL -向上取整
ROUND -四舍五入
语法 ROUND(字段|数值,保留的小数位数)
SELECT ROUND(123456.1234,’-3‘)
-123000
TRUNC -不四舍五入,直接截取。
SIGN
日期函数
SYSDATE 返回系统当前时间。
格式:SELECT SYSDATE FROM DUAL;
ROUND -四舍五入
ROUND(日期|字段,格式字符串)
SELECT ROUND(DATE '198-6-30','YYYY')FROM DUAL;
如果是上半年则舍去,下半年返回明年的第一天。
格式字符串:YYYY,MM,DD
如果第二个参数不写,则默认四舍五入当日。
TRUNC
截取日期,向下取整。
EXTRACT
year month day
语法:EXTRACT(格式字符串,FROM 日期字段)
SELECT EXTRACT(YEAR FROM SYSDATE)FROM DUAL
ADD_MONTHS
给日期加减月。
ADD_MONTHS (日期|字段,加减月)
--如果是正数则加,负数则减。
SELECT ADD_MONTH(SYSDATE,1)
FROM DUAL;
SELECT ADDMONTH(SYSDATE,-1)
FROM DUAL;
MONTHS_BETWEEN
两个月相减的差。
MONTHS_BETWEEN(日期|字段,日期|字段)
SELECT
HIREDATE,
TRUNC(MONTH_BETWEEN(SYSDATE,HIREDATE)/12) AS 工龄
FROM
EMP;
LAST_DAY 返回当月的最后一天
语法:LAST_DAY(日期|字段)
SELECT
LAST_DAY(SYSDAYE)
FROM
DUAL;
NEXT_DAY
-返回离当前日期最近的星期几。
1代表sunday,2代表monday,以此类推。
--查询距离当天最近的星期日。
SELECT
NEXT_DAY(SYSDATE,1)
FROM
DUAL;