簡體   English   中英

Oracle 數據類型轉換

[英]Oracle Data type convert

在我的表 (EventPlanLine) 中,有兩列創建了數據類型為 Date、TimeStart 和 TimeEnd。 那么,插入數據如下所示:

Insert into EVENTPLANLINE (TIMESTART,TIMEEND) 
values (to_date('25-OCT-18 8:00:00','DD-MON-RR HH24:MI:SS'),
        to_date('25-OCT-18 17:00:00','DD-MON-RR HH24:MI:SS'));

結果:

25-OCT-18, 25-OCT-18

請原諒我只拿起那兩列數據插入來顯示。 列中數據呈現的結果顯示沒有時間的DD-MON-RR格式。 這里的問題是,數據如何以 DD-MON-RR HH24:MI:SS 格式呈現。 我已經從在線資源中檢查過,我可以從 Oracle 更改 NLS_DATE_FORMAT,是的,它確實如此,並且隨着時間的推移,如下所示

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR HH24:MI:SS'

但是數據庫中所有數據類型為Date的表都發生了變化。 那么有沒有一種解決方案可以改變一個表日期類型而不是整個數據庫?

日期列沒有人類可讀的格式; 有一個內部表示,客戶端決定如何顯示結果(通常基於 NOS_DATE_FORMAT),除非您使用to_char()明確格式化查詢中的列。

但是數據庫中所有數據類型為Date的表都發生了變化

不,您的客戶正在使用該設置將日期顯示為格式化字符串。 Notign 在數據庫中發生了變化。

那么有沒有一種解決方案可以改變一個表日期類型而不是整個數據庫?

不,您不能為表中的列設置格式 - 它們只是日期。

您所能做的就是明確格式化為查詢的一部分; 然后可以對每個日期進行不同的格式化。 相當做作,但為了證明:

alter session set nls_date_format = 'DD-Mon-RR';

select
  timestart,
  timeend,
  to_char(TIMESTART, 'YYYY-MM-DD HH24:MI:SS') as timestart_2,
  to_char(TIMEEND, 'FMDay DD/Mon/YYYY HH:MI AM', 'NLS_DATE_LANGUAGE=ENGLISH') as timeend_2
from EVENTPLANLINE;

TIMESTART TIMEEND   TIMESTART_2         TIMEEND_2                  
--------- --------- ------------------- ---------------------------
25-Oct-18 25-Oct-18 2018-10-25 08:00:00 Thursday 25/Oct/2018 5:0 PM

如果結果格式很重要,那么不要依賴 NLS 格式,因為運行您的代碼的其他人可能在他們的會話中有不同的設置。 (作為相關說明,不要依賴於字符串到日期的隱式轉換——您不在此處,但它們經常一起使用...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM