日期格式在oracle数据库中保持相同

时间:2013-02-14 07:05:13

标签: database oracle

INSERT INTO DELLL (
DATETIMEMY) 
SELECT    to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD'),'YYYY/MM/DD') AS DATETIMEMY
FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422

SU_MODIFYDATE = 01/18/2013

但在DELLL日期(DATETIMEMY)格式插入后仍然相同仍然相同

DATETIMEMY = 01/18/2013

3 个答案:

答案 0 :(得分:2)

你没有为DATE分配格式。它们在内部存储为数字,没有格式。当您想要选择日期时,格式会出现。所以在你的情况下你应该这样做:

首先按原样插入日期,不要尝试将其转换为char并再次返回:

SQL> INSERT INTO DELLL (
  2  DATETIMEMY) SELECT SU_MODIFYDATE
  3  FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422;

1 row created.

现在要以特定格式选择它,您可以使用TO_CHAR对其进行格式化。

SQL> select * from delll;

DATETIMEMY
----------
01/18/2013 <-- which isn't what you want to see, you wanted to see yyyy/mmm/dd. so...

SQL> select to_char(DATETIMEMY,'yyyy/mm/dd') DATETIMEMY from DELLL
  2  /

DATETIMEMY
----------
2013/01/18

或者,要应用于该会话中具有date数据类型的所有选择,您可以更改默认显示格式:

SQL> alter session set nls_date_format='yyyy/mm/dd';

Session altered.

SQL> select * from delll;

DATETIMEMY
----------
2013/01/18

答案 1 :(得分:0)

示例中的INSERT或SELECT不会修改日期的存储方式。使用当前连接格式首选项/区域设置选择它们时,将对日期进行格式化。

您正在使用TO_DATE,选择返回的值与任何其他日期相同,它将根据区域设置进行格式化。

答案 2 :(得分:0)

DazzaL的答案正确,其中讨论了日期的格式化,存储和检索。

我想讨论你在代码中做了什么。

Oracle将日期存储到精确到秒。简单来说,您可以MM/DD/YYYY HH24:MI:SS格式检索日期。

通过发出to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD'),'YYYY/MM/DD'),您实际上将截止日期截至日期部分。因此,当您尝试检索此值时,HH24:MI:SS部分将00:00:00,因为您截断了日期。

如果您希望将SU_MODIFYDATE中的所有详细信息(从年,月,日,时,分和秒)插入DELLL的列中,您应该只使用

INSERT INTO DELLL (
DATETIMEMY) 
SELECT SU_MODIFYDATE AS DATETIMEMY
FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422

这将确保SU_MODIFYDATE列中的所有日期部分都插入到新列中。

如果您要截断日期,例如,使用to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD HH24:MI'),'YYYY/MM/DD HH24:MI')

的最快时间

同样,您可以根据自己的选择截断从年份到第二部分的日期。

如果要插入截断日期,则应使用已有的查询。如果您要插入日期及其所有部分,请使用to_charto_date来避免截断。