日期类型
表 1 日期类型
| 名称 | 描述 | 存储空间 | 范围 |
|---|---|---|---|
| DATETIME/DATE | 存储不带时区的日期类型数据。 1. 保存年、月、日、时、分、秒 | 8字节 | [0001-01-01 00:00:00, 9999-12-31 23:59:59] |
| TIMESTAMP[(n)] | 存储不带时区的时间戳类型数据。 1. 保存年、月、日、时、分、秒、微妙 2. n取值范围[0,6],表示秒后面的精度。TIMESTAMP(n)也可以不带参数,即写为TIMESTAMP,这时秒后面小数位数的精度默认为6。 | 8字节 | [0001-01-01 00:00:00.000000, 9999-12-31 23:59:59.999999] |
| TIMESTAMP[(n)] WITH TIME ZONE | 存储带时区的时间戳类型数据。 1. 保存年、月、日、时、分、秒、微妙、时区 2. n取值范围[0,6],表示秒后面的精度。TIMESTAMP(n)也可以不带参数,即写为TIMESTAMP,这时秒后面小数位数的精度默认为6。 | 12字节 | [0001-01-01 00:00:00.000000, 9999-12-31 23:59:59.999999] |
| TIMESTAMP[(n)] WITH LOCAL TIME ZONE | 存储带时区的时间戳类型数据。不存储时区,存储时转换为数据库时区的TIMESTAMP,用户查看时转换为当前会话所在时区的TIMESTAMP。 1. 保存年、月、日、时、分、秒、微妙 2. n取值范围[0,6],表示秒后面的精度。TIMESTAMP(n)也可以不带参数,即写为TIMESTAMP,这时秒后面小数位数的精度默认为6。 | 8字节 | [0001-01-01 00:00:00.000000, 9999-12-31 23:59:59.999999] |
表2显示了可以用于格式化日期和时间值的模板
表 2 用于日期/时间格式化的模式
| 类别 | 模式 | 描述 |
| 小时 | HH | 一天的小时数(01-12) |
| HH12 | 一天的小时数(01-12) | |
| HH24 | 一天的小时数(00-23) | |
| TZH | 时区信息的小时数 | |
| 分钟 | MI | 分钟(00-59) |
| TZM | 时区信息的分钟数 | |
| 秒 | FF | 微妙(000000-999999) |
| FF3 | 微妙(000-999) | |
| FF6 | 微妙(000000-999999) | |
| SS | 秒(00-59) | |
| SSSSS | 午夜后的秒(0-86399) | |
| 上午、下午 | AM或A.M. | 上午标识 |
| PM或P.M. | 下午标识 | |
| 年 | YYYY | 年(4位) |
| YYY | 年的后三位 | |
| YY | 年的后两位 | |
| Y | 年的最后一位 | |
| 月 | MONTH | 全长大写月份名 |
| MON | 大写缩写月份名 | |
| MM | 月份数(01-12) | |
| 天 | DAY | 全长大写日期名 |
| DY | 缩写大写日期名 | |
| DDD | 一年里的日(001-366) | |
| DD | 一个月里的日(01-31) | |
| D | 一周里的日(1-7 ;周日是 1) | |
| 周 | W | 一个月里的周数(1-5)(第一周从该月第一天开始) |
| WW | 一年里的周数(1-53)(第一周从该年的第一天开始) | |
| 世纪 | CC | 世纪(2位) |
| 季度 | Q | 季度 |
示例:
SQL> select to_char(systimestamp, 'YYYY-MM-DD HH:MI:SS A.M.');
TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH:MI:SS A.M.')
-------------------------------------------------
2025-11-12 09:37:31 AM
1 rows fetched.
SQL> select to_char(systimestamp, 'YYYY-MM-DD HH:MI:SSXFF4');
TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH:MI:SSXFF4')
------------------------------------------------
2025-11-12 09:27:23.6485
1 rows fetched.
--创建表。
SQL> CREATE TABLE date_t1 (a datetime,b timestamp(6), c timestamp(4) with time zone, d TIMESTAMP(2) WITH LOCAL TIME ZONE);
--插入数据。
SQL> INSERT INTO date_t1 VALUES ('2025-11-12 09:37:31', systimestamp, systimestamp, systimestamp);
--查看数据。
SQL> SELECT * FROM date_t1;
A B C D
---------------------- -------------------------------- ---------------------------------------- --------------------------------
2025-11-12 09:37:31 2025-11-20 17:35:31.740367 2025-11-20 17:35:31.7404 +08:00 2025-11-20 17:35:31.74
1 rows fetched.
SQL> DROP TABLE date_t1;