2013-02-14 81 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