如何在 Oracle 中插入和检索日期?
问题:
您想将日期插入表中并检索它们。
解决方案
Oracle 默认使用 DD-MON-YYYY 格式表示日期,其中
- DD 表示两位数的日期。
- MON 表示月份的前三个字母,例如 FEB。
- YYYY 表示四位数的年份,例如 1968
让我们看一个向客户表添加一行的示例,该表包含一个名为 dob 的 DATE 列。
以下 INSERT 语句向客户表添加一行,并将 dob 列设置为1968 年 2 月 5 日:
示例
INSERT INTO customer (customer_id, first_name, last_name, dob, phone) VALUES (7, 'James', 'Bond', '31-DEC-2000', '007-007-0007');
您还可以使用 DATE 关键字向数据库提供日期文字。日期必须使用 YYYY-MM-DD 格式,其中
- YYYY 为四位数年份。
- MM 为两位数月份,范围从 1 到 12。
- DD 为两位数日期。
示例
INSERT INTO customer (customer_id, first_name, last_name, dob, phone) VALUES (11, 'Roger', 'Federer', DATE '1983-10-01', '001-001-0001');
默认情况下,数据库返回的日期格式为 DD-MON-YY,其中 YY 为日期的后两位年份。
使用 TO_CHAR() 和 TO_DATE() 转换日期时间
Oracle 数据库提供一些函数,可用于将一种数据类型的值转换为另一种数据类型。我们将使用 TO_CHAR() 和 TO_DATE() 函数将日期时间转换为字符串,反之亦然。
TO_CHAR() 将日期时间转换为字符串
TO_CHAR(x [, format]) 将日期时间 x 转换为字符串。我们还可以为 x 提供可选的格式。示例格式为 MONTH DD, YYYY,其中
- MONTH 是大写的月份全名。
- DD 是两位数的日期。
- YYYY 是四位数的年份。
以下查询使用 TO_CHAR() 将客户表中的 dob 列转换为格式为 MONTH DD, YYYY 的字符串
示例
SELECT customer_id, TO_CHAR(dob, 'MONTH DD, YYYY') FROM customers;
下一个查询使用 SYSDATE 函数从数据库获取当前日期和时间,然后使用 TO_CHAR() 将日期和时间转换为字符串,格式为 MONTH DD, YYYY, HH24:MI:SS。此格式的时间部分表示小时采用 24 小时格式,并且分钟和秒也包含在字符串中。
示例
SELECT TO_CHAR(SYSDATE, 'MONTH DD, YYYY, HH24:MI:SS') FROM dual;
NOVEMBER 13, 2020, 10:04:11
TO_DATE() 将字符串转换为日期时间
我们可以使用 TO_DATE(x [, format]) 将 x 字符串转换为日期时间。我们可以提供一个可选的格式字符串来指示 x 的格式。如果省略格式,日期必须采用默认数据库格式(通常为 DD-MON-YYYY 或 DD-MON-YY)。
以下查询使用 TO_DATE() 将字符串"31-DEC-2020"转换为"31-DEC-20"到 2020 年 12 月 31 日。但是,最终日期将以默认格式 DD-MON-YY 显示。
示例
SELECT TO_DATE('31-DEC-2020'), TO_DATE('31-DEC-20') FROM Dual;
最后,DBA 可以帮助您设置 Oracle 中的默认日期格式。
DBA 可以通过在数据库的 init.ora 或 spfile.ora 文件中设置 NLS_DATE_FORMAT 参数的值来更改此参数的设置,这两个文件在数据库启动时都会读取。DBA 还可以使用 ALTER SYSTEM 命令设置 NLS_DATE_FORMAT。您还可以使用 SQL*Plus 为您自己的会话设置 NLS_DATE_FORMAT 参数,您可以使用 ALTER SESSION 命令来执行此操作
示例
ALTER SESSION SET NLS_DATE_FORMAT = 'MONTH-DD-YYYY';