如何在 Oracle 中插入和检索日期?
如何在 Oracle 中插入和检索日期?
oraclesoftware & codingprogramming更新于 2025/6/2 21:22:17
问题:
您想将日期插入表中并检索它们。
解决方案
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';
相关文章
Oracle 11g 和 Oracle 12c 之间的区别
如何在 Oracle 中遍历分层数据?
如何在 Oracle 中遍历分层数据并对同一层级的行进行排序?
如何在 Oracle 数据层次结构中删除分支?
如何在 Oracle 中生成组小计和总计?
如何在 Oracle 中为指定维度的所有组合生成组小计?
如何在执行前验证 Oracle 动态 SQL 语句的语法?
如何编写一个通用过程来查找并删除 Oracle 中任意表和列的重复项?
如何在 Oracle 中将 SQL 数据转换为 XML?
如何在 Oracle 表中存储 XML 数据?
打印
下一节:如何在 Oracle 中使用 DATETIME 函数? ❯❮ 上一节:如何在 Oracle 中对结果进行 UNPIVOT?