SQL 数值函数、日期函数与转换函数

1. 删除表并清空回收站

在 Oracle 数据库中,使用 DROP TABLE 语句可以删除表。如果加上 PURGE 选项,可以直接清空回收站中的表。

示例:

1
2
-- 删除表并清空回收站
DROP TABLE 表名 PURGE;

注意

  • PURGE 选项会永久删除表,无法恢复。

2. 数值函数

数值函数用于对数值数据进行处理和计算。

(1)ROUND:四舍五入

1
2
3
4
5
-- 保留小数点后三位,四舍五入
SELECT ROUND(6.5415926, 3) FROM dual; -- 结果:6.542

-- 整数部分四舍五入(保留到百位)
SELECT ROUND(166.54, -2) FROM dual; -- 结果:200

(2)TRUNC:截断小数位

1
2
3
4
5
6
7
8
-- 默认截取到整数,不四舍五入
SELECT TRUNC(3.65) FROM dual; -- 结果:3

-- 截取小数点后三位
SELECT TRUNC(3.6517231, 3) FROM dual; -- 结果:3.651

-- 截取到百位
SELECT TRUNC(1323.65, -2) FROM dual; -- 结果:1300

(3)MOD:取余数

1
2
-- 取余数
SELECT MOD(18, 7) FROM dual; -- 结果:4

(4)CEILFLOOR:向上取整和向下取整

1
2
3
4
5
6
7
-- 向上取整
SELECT CEIL(3.15) FROM dual; -- 结果:4
SELECT CEIL(-3.15) FROM dual; -- 结果:-3

-- 向下取整
SELECT FLOOR(3.15) FROM dual; -- 结果:3
SELECT FLOOR(-3.15) FROM dual; -- 结果:-4

(5)POWER:求幂

1
2
-- 求 3 的 5 次方
SELECT POWER(3, 5) FROM dual; -- 结果:243

3. 日期函数

日期函数用于处理日期和时间数据。

(1)SYSDATE:获取当前系统日期

1
2
-- 获取当前系统日期
SELECT SYSDATE FROM dual;

(2)ADD_MONTHS:在指定日期上加上指定的月数

1
2
-- 在当前日期上减去 2 个月
SELECT ADD_MONTHS(SYSDATE, -2) FROM dual;

(3)MONTHS_BETWEEN:计算两个日期之间的月数

1
2
-- 计算当前日期与 '2018-05-11' 之间的月数
SELECT MONTHS_BETWEEN(SYSDATE, '11-5月-2018') FROM dual;

(4)NEXT_DAY:返回下一个指定星期几的日期

1
2
-- 返回下一个星期一的日期
SELECT NEXT_DAY(SYSDATE, '星期一') FROM dual;

(5)LAST_DAY:返回指定日期所在月份的最后一天

1
2
-- 返回 '2008-08-08' 所在月份的最后一天
SELECT LAST_DAY('8-8月-2008') FROM dual; -- 结果:'2008-08-31'

4. 转换函数

转换函数用于将数据从一种类型转换为另一种类型。

(1)TO_CHAR:将日期或数字转换为字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 将当前日期转换为字符串
SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh:mi:ss') FROM dual;

-- 将当前日期转换为 24 小时制字符串
SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM dual;

-- 去掉前导零
SELECT TO_CHAR(SYSDATE, 'fmyyyy-mm-dd hh24:mi:ss') FROM dual;

-- 返回当前日期的天数
SELECT TO_CHAR(SYSDATE, 'dd') FROM dual;

-- 返回当前日期的星期几
SELECT TO_CHAR(SYSDATE, 'dy') FROM dual;

-- 返回指定日期是一周的第几天(星期日为 1)
SELECT TO_CHAR(TO_DATE('2018-09-10', 'yyyy-mm-dd'), 'd') FROM dual; -- 结果:2

(2)TO_NUMBER:将字符串转换为数字

1
2
-- 将字符串 '109' 转换为数字
SELECT TO_NUMBER('109') FROM dual; -- 结果:109

(3)TO_DATE:将字符串转换为日期

1
2
-- 将字符串转换为日期
SELECT TO_DATE('2008-08-08 20:08:08', 'yyyy-mm-dd hh24:mi:ss') FROM dual;

5. 空值处理

在 SQL 中,空值(NULL)需要特殊处理。

(1)NVL:替换空值

1
2
-- 如果 comm 为空,则替换为 0
SELECT sal, comm, sal + NVL(comm, 0) FROM tmp_emp;

(2)NVL2:根据空值返回不同结果

1
2
-- 如果第一个参数为空,返回第三个参数值,否则返回第二个参数值
SELECT NVL2('', '不为空', '为空') FROM dual; -- 结果:'为空'

(3)NULLIF:比较两个值,如果相等则返回 NULL

1
2
-- 如果两个参数相等,返回 NULL,否则返回第一个参数值
SELECT NULLIF('test11', 'test') FROM dual; -- 结果:'test11'

(4)COALESCE:返回第一个非空值

1
2
-- 返回第一个非空值
SELECT COALESCE('', 'b', ' ', 'a') FROM dual; -- 结果:'b'

总结

  1. 数值函数ROUNDTRUNCMODCEILFLOORPOWER
  2. 日期函数SYSDATEADD_MONTHSMONTHS_BETWEENNEXT_DAYLAST_DAY
  3. 转换函数TO_CHARTO_NUMBERTO_DATE
  4. 空值处理NVLNVL2NULLIFCOALESCE

SQL 数值函数、日期函数与转换函数
https://blog.pangcy.cn/2018/09/05/数据库相关/Oracle/SQL 语法/SQL 数值函数、日期函数与转换函数/
作者
子洋
发布于
2018年9月5日
许可协议