oracle中的日期/时间 - 日期持续时间功能

时间:2012-03-02 10:25:42

标签: sql oracle date time

我正在尝试创建一个可以减去2个日期的函数,但我遇到了一些问题:

首先存储日期,然后存储功能。

以下是我将日期存储到表中的代码:

CREATE TABLE car_info
  (
   car_id NUMBER(4)
   arrival DATE,
   departure DATE
   ......
  )

这里我已将到达/离开时间保存为日期。理想情况下,我会想要它的格式为dd-mon-yyy-hh-mm-ss

这是我遇到第一个问题的地方:

INSERT INTO car_info 
VALUES('0001', to_date('12-jun-2006 06:00:01'), to_date('14-jun-2006 09:00:01')

从我所做的研究来看,这似乎是正确的吗?

但是,如果我执行SELECT * FROM car_info,则结果为:

car_id       arrival_date      departure_date
   1          12-jun-2006        14-jun-2006

有谁知道为什么它没有将结果显示为完整的日期和时间?

要阻止这篇文章获取太多信息,一旦我解决了这个问题,我就会发布我的问题。

感谢您的帮助

kihd问,Darren

问题的第二部分已移至Oracle sql - date subtraction within a function

3 个答案:

答案 0 :(得分:3)

Oracle中的DATE是一个时间点,它不存储格式。显示日期时选择一种格式,以便人类可以理解。

默认情况下,DATE将根据您的NLS_DATE_FORMAT设置显示。您可以使用以下命令更改此设置:

ALTER SESSION SET NLS_DATE_FORMAT='dd-mon-yyyy hh24:mi:ss';

您还可以在查询中使用TO_CHAR来要求显式格式:

SELECT to_char(arrival, 'dd-mon-yyyy hh24:mi:ss')
  FROM car_info

答案 1 :(得分:2)

DATE列保存在以7个字节编码的数据库中,而不是格式化的字符串。从数据库中选择DATE列时,您使用的客户端工具必须对其进行格式化以便以有意义的方式显示它。它使用默认格式掩码执行此操作。如何设置这取决于您使用的工具。在SQL Plus中,您可以这样做:

alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';

或者您可以使用TO_CHAR格式化查询中的日期。

答案 2 :(得分:2)

Oracle以二进制内部表示形式存储日期,因此您可以在会话,数据库或查询级别设置输入它们的方式以及检索它们的格式。

您通常应在插入时明确格式化日期,以防止出现任何隐式转换错误:

INSERT INTO car_info  
VALUES('0001', 
       to_date('12-jun-2006 06:00:01'), 
       to_date('14-jun-2006 09:00:01'))

应该是:

INSERT INTO car_info  
VALUES('0001', 
       to_date('12-jun-2006 06:00:01', 'dd-mon-yyyy hh24:mi:ss'), 
       to_date('14-jun-2006 09:00:01', 'dd-mon-yyyy hh24:mi:ss'))

编辑:Oracle日期等的格式模型是here

相关问题