在linux系统中,你可以直接使用命令date查看当前操作系统的时间。例如:
--在UOS中,这样显示
ywbaoyw@xxx@baoyw-b:~/Desktop$ date
2024年 01月 09日 星期二 11:18:10 CST
ywbaoyw@xxx@baoyw-b:~/Desktop$
--在Linux中,这样显示
[root@oracle-baoyw]# date
Tue Jan 9 11:19:49 CTS 2024
[root@oracle-baoyw]#
这里,我们不讨论时区,也不讨论如何设置时间,只说说date在Oracle数据库中的取值操作。在Oracle中,我们取 sysdate。以下的例子中,通过 sysdate 来显示不同的时间。
sysdate
--当前时间 日-月-年
SQL> select sysdate from dual;
SYSDATE
---------
09-JAN-24
--当前时间 格式化 年-月-日 时:分:秒
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2024-01-09 11:23:39
--24小时之前
SQL> select to_char(sysdate-1,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE-1,'
-------------------
2024-01-08 11:24:39
--12小时之前
SQL> select to_char(sysdate-1/2,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE-1/2
-------------------
2024-01-08 23:25:20
--6小时之前
SQL> select to_char(sysdate-1/4,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE-1/4
-------------------
2024-01-09 05:25:46
--2小时之前
SQL> select to_char(sysdate-2/24,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE-2/2
-------------------
2024-01-09 09:26:23
--1小时之前
SQL> select to_char(sysdate-1/24,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE-1/2
-------------------
2024-01-09 10:27:03
--半小时之前
SQL> select to_char(sysdate-1/24/2,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE-1/2
-------------------
2024-01-09 10:57:49
那么,有了以上的取值,我们在做其他操作时,就可以直接套用了。这里需要注意的是,如果用了 trunc() ,取值将不同。
trunc(),用于截取时间或者数值,返回指定的值。
数值处理语法格式:trunc(number,[decimals])
number:必要参数,是输入的一个数值。
decimals:可忽略参数,是要截取的位数;缺省时表示截掉小数点后的面值。
日期处理语法格式:trunc(date,[format])
date:必要参数,是输入的一个date日期值。
format:可忽略参数,是日期格式。
format 常用取值:
- 缺省:获取当前年月日:如:2024/1/9 00:00:00
- y或yy或yyy或yyyy或year:获取今天的一月一日:如:2024/1/1
- 'mm'或'month':获取当月的第一天:如:2024/1/1
- 'q':获取本星期的第一天【是周日而不是周一】
- 'hh':获取当前的小时:如:2024/1/9 15:00:00
- 'mi':获取当前的时分:如:2024/1/9 15:22:00
所以,当我们使用 trunc() 来截取时间时,与实际时间不同。
trunc()
--当前时间 格式化 年-月-日 时:分:秒
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2024-01-09 11:23:39
--当前时间
SQL> select to_char(trunc(sysdate),'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE-1/2
-------------------
2024-01-09 00:00:00
灵活运用。假如,你的归档快满了,你要删除一段时间的,那么可以这样操作:
delete archivelog
--删除前一天23点之前的归档
delete archivelog all completed before 'trunc(sysdate-1)+23/24';
--删除0.5小时之前的归档
RMAN> delete noprompt archivelog until time 'sysdate-1/24/2' like '+ARCH/%';
--删除1小时之前的归档
RMAN> delete noprompt archivelog until time 'sysdate-1/24' like '+ARCH/%';
--删除6小时之前的归档
RMAN> delete noprompt archivelog until time 'sysdate-1/4' like '+ARCH/%';
--删除1天之前的归档
RMAN> delete noprompt archivelog until time 'sysdate-1' like '+ARCH/%';