字符串操作,数值操作,日期操作,空值操作--Oracle(二)

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,0FROM myemp;

NVL2(arg1,arg2,arg3)
当arg1不为null,则函数返回arg2
当arg1为null,则函数返回arg3
该函数是根据一个值是否为null来返回两个不同结果。
查看每个人的绩效情况,即:有绩效的,显示有绩效,绩效为null的显示没有绩效

SELECT name ,comm,NVL2(comm,'有奖金','没奖金'FROM myemp;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值