2012-03-02 134 views
2

我想创建一个可以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问候,达伦

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

+0

请问作为一个单独的问题的功能;文森特已经回答了关于插页的原始问题。问一个以上的东西被认为是不好的形式,而一旦回答的人就会少得多再看一遍。 – 2012-03-02 11:55:24

+0

如果你问一个新问题,节省时间; '显示错误函数get_duration'会给你提供什么是错的信息,你可能想要包含哪些信息;你应该显示你想让调用者看到返回的内容 - 如果你真的想要返回一个格式化的字符串,以及它究竟应该如何看待'x天,y小时,z分钟'。一些示例数据和预期输出会很好。 – 2012-03-02 12:19:45

+0

谢谢Alex,我会重新发布这个功能的下一部分,然后我仍然在挣扎。感谢您的帮助 – DarrenJ65 2012-03-02 12:30:11

回答

3

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

日期默认情况下会显示,按您的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 
+0

谢谢您的帮助,(到达'dd-mon-yyyy hh24:mi:ss'),这对我来说非常合适 – DarrenJ65 2012-03-02 10:42:28

2

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

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

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

2

甲骨文店日期,以便你如何输入它们,并且可以在会话,数据库或查询级别设置检索它们的格式。

插入,以防止任何隐式转换错误时,你应该明确地普遍格式化日期:

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