如何在 Oracle 中插入和检索日期?

oraclesoftware & codingprogramming

问题:

您想将日期插入表中并检索它们。

解决方案

Oracle 默认使用 DD-MON-YYYY 格式表示日期,其中

  1. DD 表示两位数的日期。
  2. MON 表示月份的前三个字母,例如 FEB。
  3. 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 格式,其中

  1. YYYY 为四位数年份。
  2. MM 为两位数月份,范围从 1 到 12。
  3. 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,其中

  1. MONTH 是大写的月份全名。
  2. DD 是两位数的日期。
  3. 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';


相关文章