如何在Oracle中插入和检索日期?
问题
您想将日期插入表中并检索它们。
解决方案
Oracle 默认使用 DD-MON-YYYY 格式表示日期,其中
- DD 表示两位数的日期。
- MON 表示月份的前三个字母,例如 FEB。
- YYYY 是四位数的年份,例如 1968
让我们来看一个向包含名为 dob 的 DATE 列的 customers 表中添加行的示例。
以下 INSERT 语句向 customers 表添加一行,并将 dob 列设置为 05-FEB-1968
示例
INSERT INTO customers ( 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 customers ( 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() 将 customers 表中的 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 的格式。如果我们省略 format,则日期必须采用默认的数据库格式(通常为 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';