SQL基础--SQL字符串函数操作,数值操作,日期操作,空值操作

来源:互联网 发布:网站内容采集软件 编辑:程序博客网 时间:2024/05/20 18:48

如果遇到没有创建的表影响运行使用

->点我进入表的创建与数据插入
或者评价反馈

SELECT语句

用于查询表中数据
SELECT子句后面跟的是要查询的字段
可以包括表中的具体字段,函数或者表达式
FROM子句用来指定数据来源的表
WHERE子句用来添加过滤条件,这样做的结果
是只将满足条件的记录查询出来

查看emp表中的数据

SELECT ename,job
FROM emp_swm

SELECT 子句中使用表达式

查看每个员工的年薪? 乘以12

SELECT ename,sal*12
FROM emp_swm

字符串函数

CONCAT()函数,连接字符串

SELECT CONCAT(CONCAT(ename,’,’),sal)
FROM emp_swm
另外可以用 || 连接
SELECT ename ||’,’ || sal
FROM emp_swm

LENGTH函数,查看字符串长度

SELECT ename,LENGTH(ename)
FROM emp_swm

UPPER,LOWER,INITCAP 全大写,全小写,首字母大写

将字符串转换为全大写,全小写,首字母大写
对于INITCAP而言,可以使用空格隔开多个单词,
那么每个单词首字母都会大写

SELECT UPPER(‘helloword’),
LOWER(‘HELLOwoRLD’),
INITCAP(‘helloWorlD’),
INITCAP(‘HELLOWORLD’)
FROM dual

伪表dual

当查询的内容不合任何表中的数据有关系时,可以使用伪装,
伪表只会查询出一条记录。

TRIM,LTRIM,RTRIM 去除当前字符串中两边的指定重复字符

去除当前字符串中两边的指定重复字符,
LTRIM仅去除左侧的,RTRIM去除右侧的
SELECT TRIM(‘e’ FROM ‘eeloleeee’)
FROM dual
SELECT LTRIM(‘esdseeeloleee’,’sed’)
FROM dual

LPAD,RPAD 补位函数

补空格可以实现左右对齐的效果
arg1,显示的数据,arg2,要显示的长度,arg3不够位数的话补充的字符
SELECT RPAD(sal,6,’ ‘)
FROM emp_swm

SUBSTR 截取字符串

数据库中的下标都是从1开始的
SELECT SUBSTR(‘thinking in java’,13,4)
FROM dual
第三个参数不指定则是截取到末尾,
指定长度若超过实际可以截图的内容也是截取到末尾
SELECT SUBSTR(‘thinking in java’,10,1000)
FROM dual
截取的位置可以是负数,若是则表示从倒数第几个字符开始截取
SELECT SUBSTR(‘thinking in java’,-4,4)
FROM dual

INSTR(char1,char2[,n,m])函数 查找char2在char1中的位置

查找char2在char1中的位置
n为从第几个字符开始检索
m为第几次出现
n,m不写则默认都是1
SELECT INSTR(‘thinking in java’,’in’,4,3)
FROM dual

数字函数

ROUND(n,m)四舍五入

n为你要计算的数,m默认为0,正数为小数点后几位,负数反之亦然
SELECT ROUND(55.678,-2)
FROM dual
SELECT ROUND(45.678,-2)
FROM dual

TRUNC 将数字直接截取下来变为0

SELECT TRUNC(45.678,2) FROM dual
SELECT TRUNC(45.678,1) FROM dual
SELECT TRUNC(45.678,-2) FROM dual
SELECT TRUNC(45.678,-1) FROM dual

MOD(n,m)求余数

m若为0则直接返回被除数
SELECT MOD(sal,1000) FROM emp_swm

CEIL,FLOOR 向上取整和向下取整

向上取整和向下取整
SELECT CEIL(45.678) FROM DUAL
SELECT FLOOR(45.678) FROM DUAL

日期类型

SYSDATE,SYSTIMESTAMP 返回一个当前系统时间的DATE类型值

SYSDATE对象数据库的一个内部函数,
该函数返回一个表示当前系统时间的DATE类型值
SYSTIMESTAMP返回的是一个表示当前系统时间的时间戳类型的值
SELECT SYSDATE FROM dual
SELECT SYSTIMESTAMP FROM dual

TO_DATE函数 日期转换函数

TO_DATE函数
可以将字符串按照给定的日期格式解析
为一个DATE类型的值
在日期格式字符串中凡不是英文,符号,数字的其他字符
都需要双引号括起来。
SELECT
TO_DATE(‘2008年08月08日 20:08:08’,
‘YYYY”年”MM”月”DD”日” HH24-MI-SS’)
FROM dual

日期的计算

日期可以与一个数字进行加减法,这相当于加减指定的天
两个日期可以进行减法,差为相差的天。

查看员工的入职时间?

SELECT ename,CONCAT(TRUNC(SYSDATE-hiredate,0),’天’)
FROM emp_swm

输入自己生日,查看到今天活了多少天了。

SELECT CONCAT(TRUNC(SYSDATE-TO_DATE(‘1996-03-15’,’YYYY-MM-DD’),0),’天’)
FROM dual

TO_CHAR() 可以将DATE按照给定的格式转换成字符串

SELECT TO_CHAR(SYSDATE,’YYYY-MM-DD HH24:MI:SS’)
FROM dual
SELECT TO_CHAR(
TO_DATE(‘49-08-10’,’RR-MM-DD’),
‘YYYY-MM-DD’
)FROM dual

LAST_DAY(date) 返回给定日期所在月的月底日期

返回给定日期所在月的月底日期,即所在月有多少天

查看当前月底?

SELECT LAST_DAY(SYSDATE)
FROM dual

ADD_MONTHS(date,i) 对给定日期加上指定的月

对给定日期加上指定的月,若i为负数则是减法

查看每个员工入职20周年的纪念日?

SELECT ename,ADD_MONTHS(hiredate,12*20)
FROM emp_swm

MONTHS_BETWEEN(date1,date2) 计算两个日期之间相差的月

计算两个日期之间相差的月,计算时根据date1-date2得到的

查看每个员工至今入职多少个月了?

SELECT ename,MONTHS_BETWEEN(SYSDATE,hiredate)
FROM emp_swm

NEXT_DAY(date,i) 返回给定日期的第二天开始一周之内的指定周几的日期

返回给定日期的第二天开始一周之内的指定周几的日期
i:1表示周日,2为周一
SELECT NEXT_DAY(SYSDATE,5)
FROM dual

LEAST(…),GREATEST(…) 求最小值和最大值

求最小值和最大值,除了日期外,常用的数字也可以比较大小,数量不限。
SELECT
LEAST(SYSDATE,TO_DATE(‘2017-08-05’,’YYYY-MM-DD’))
FROM dual

EXTRACT() 提取给定日期中指定时间分量的值

提取给定日期中指定时间分量的值
SELECT EXTRACT(YEAR FROM SYSDATE)
FROM dual

查看1980年入职的员工

SELECT ename,hiredate
FROM emp_swm WHERE EXTRACT(YEAR FROM hiredate)=1980

空值操作

插入NULL值

CREATE TABLE student_swm(  id NUMBER(4),  name CHAR(20),  gender CHAR NOT NULL)INSERT INTO student_swm VALUES(1,'小李子','F');显式插入NULL值INSERT INTO student_swm VALUES(2,'小贵子',NULL);隐式插入NULL值INSERT INTO student_swm(id,name) VALUES(3,'小林子');SELECT * FROM student_swm

更新为NULL

UPDATE student_swm SET gender=NULL WHERE id=1;

判断字段的值是否为NULL

判断要使用IS NULL或IS NOT NULL
DELETE FROM student_swm
WHERE gender IS NULL

NULL值的运算操作

NULL与任何数字运算结果还为NULL
NULL与字符串拼接等于什么都没干

查看每个员工的收入:

SELECT ename,sal,comm,sal+comm
FROM emp_swm

空值函数

NVL(arg1,arg2) 根据arg1是否为NULL返回值

当arg1为NULL,函数返回arg2的值若不为NULL,则返回arg1本身所有该函数的作用是将NULL值替换为一个非NULL值

查看每个员工的收入:

SELECT ename,sal,comm,sal+NVL(comm,0)
FROM emp_swm

NVL2(arg1,arg2,arg3) 根据arg1是否为NULL返回arg2或arg3

当arg1不为NULL,则函数返回arg2.
当arg1为NULL,则函数返回arg3.
该函数是根据一个值是否为NULL
来返回两个不同结果。
SELECT ename,comm,NVL2(comm,’有奖金’,’没有奖金’)
FROM emp_swm
SELECT ename,sal,comm,NVL2(comm,sal+comm,sal)
FROM emp_swm

0 0
原创粉丝点击