在oracle中存储日期

时间:2010-12-23 11:49:07

标签: sql oracle

我有一张桌子

create table Dummy (date_created date)

在oracle中。我希望以'dd-mon-yyyy'(12-dec-2010)格式存储日期。 我该怎么做 请帮忙。

6 个答案:

答案 0 :(得分:9)

在Oracle中,使用DATE数据类型创建的列只存储日期。它没有特定的格式,只存储日,月,年,小时,分钟和秒。您需要使用TO_DATE函数从您拥有的任何格式进行转换。如果您的文字字符串的日期格式为“dd-mon-yyyy”,并且您希望将此日期放入表中,则可以使用类似

的内容
INSERT INTO DUMMY (DATE_CREATED)
  VALUES (TO_DATE('01-FEB-2011', 'DD-MON-YYYY');

走另一条路(从DATE列值到字符串),您将使用TO_CHAR函数。如果您从表中检索某个值并想将其转换为“DD-MON-YYYY”格式,则可以使用类似

的内容
SELECT TO_CHAR(DATE_CREATED, 'DD-MON-YYYY')
  FROM DUMMY;

分享并享受。

答案 1 :(得分:2)

使用to_date()功能。在您的情况下,语法将是

insert into Dummy values (to_date('08-09-2010', 'dd-mm-yyyy'));

这是link to the detailed help

答案 2 :(得分:1)

DATE数据类型将以数据库的内部格式存储日期和时间信息(世纪,年,月,日,小时,分钟和秒)。当你从数据库中取出它时,你可以选择以你喜欢的任何格式显示它。

此信息可以使用implicit conversion from a string创建,也可以使用TO_DATE functionANSI date literal明确创建。如果您查看v $ nls_parameters视图,这将告诉您NLS_DATE_FORMAT通常用于隐式转换的内容。这通常可以定义为DD-MON-RR,这可能就是为什么在运行查询23-DEC-10时日期将以select sysdate from dual出现的原因。 (不完全确定我对nls的说法是正确的。如果我错了,请纠正我。)

但是,如果您知道如何获取日期信息,则可以使用所有日期信息。查询select to_char(sysdate, 'dd-mon-yyyy hh24:mi:ss') from dual将返回所有日期字段。

同样,下面显示的insert语句将创建一个带有日期值的行。

insert into dummy (date_created) 
values (to_date('12-dec-2010 12:34:56', 'dd-mon-yyyy hh24:mi:ss'))`

然后可以检索此数据。

select date_created from dummy

这将使用NLS_DATE_FORMAT隐式将日期转换为字符串,提供下面的输出。

DATE_CREA
---------
23-DEC-10

通过将日期显式转换为字符串,可以获得完整日期信息。

select to_char(date_created, 'DD-MON-YYYY') as date_created from dummy;

select to_char(date_created, 'DD-MON-YYYY HH24:MI:SS') as date_created 
from dummy;

这将以您需要的格式提供输出:

DATE_CREATE
-----------
23-DEC-2010

如果您始终使用TO_DATETO_CHAR函数转换为日期数据类型,则可以减少问题。隐式转换很有用,但可能会引起一些混乱或问题。

答案 3 :(得分:0)

你可以留意并留意

http://www.techonthenet.com/oracle/functions/to_date.php

使用to_date函数以您需要的格式保存数据。我建议使用SYSDATE更新表,当你需要从表中读取数据时使用类似的东西:

dbms_output.put_line(TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));

解决您的问题:

to_date('08 / JAN / 2010','DD / MON / YYYY')

答案 4 :(得分:0)

如果日期有时间部分,只需使用TRUNC(YourDate),它将截断时间部分。甲骨文不仅仅是'DATE'类型,'日期'总是有时间的一部分。

但是如果你没有指定时间 - 它将是00:00:00。

SELECT TRUNC(SYSDATE) from dual

结果:

23-12-2010

答案 5 :(得分:0)

如果没有时间,Oracle不支持DATE

您可以通过添加CHECK约束来使其始终为整数日期:

CREATE TABLE dummy (date_created date CHECK (date_created = TRUNC(date_created)))

,以您想要的任何格式插入:

INSERT
INTO    dummy (date_created)
VALUES  (TO_DATE('23-DEC-2010', 'dd-mon-yyyy'))

并以您想要的任何格式选择它:

SELECT  TO_CHAR(date_created, 'dd-mon-yyyy')
FROM    dummy