2013-02-14 82 views
1
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保持相同= 2013年1月18日日期格式在Oracle数据库

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

DATETIMEMY = 01/18/2013

+0

你是如何显示该日期的?你的默认日期格式是什么? – Mat 2013-02-14 07:06:34

+0

2/15/2013 12:10:25 AM MM/DD/YYYY @Mat这是默认日期格式 – 2013-02-14 07:11:21

回答

0

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

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

+0

我已经使用了to_date(to_char(SU_MODIFYDATE,'YYYY/MM/DD'),'YYYY/MM/DD ') – 2013-02-14 07:12:23

+0

请给出解决方案,如果我错了 – 2013-02-14 07:13:06

+0

但亲爱的,返回日期也格式化为to_char(SU_MODIFYDATE,'YYYY/MM/DD') – 2013-02-14 07:17:26

2

你不要指定格式为DATE。它们在内部存储为一个数字并且没有格式。格式出现在你想选择日期的时候。所以你的情况,你应该这样做:

第一只插入日期原样,不要试图将其转换为一个字符,然后再返回:

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 
+0

这并不是我要求:(但是感谢协调 – 2013-02-14 10:54:52

+0

@ ShahidGhafoor它是什么,你需要吗? – DazzaL 2013-02-14 10:58:13

+0

其实我想复制日期从一个表(SER_TBLSERVICES),日期格式为1-15-2013,到另一个(DELLL),它需要一个日期格式= 2013-15-1,如上所示 – 2013-02-14 11:49:40

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以避免截断。

+1

或者更简单的'trunc(SU_MODIFYDATE,'mi')'例如截断日期到分钟而不必转换为char并返回。 – DazzaL 2013-02-14 09:45:52