Oracle中的日期字段沒有格式化以便顯示 - 這是您在輸入/輸出中轉換爲/從的internal format。在Oracle日期數據類型列中存儲日期時,通過使用format model字符串描述TO_DATE函數的日期時間,可將字符串轉換爲內部格式。 Oracle將字符串解釋爲它的內部格式。當你需要顯示日期時,你做相反的事情 - 你告訴oracle如何通過再次給出一個格式模型來顯示日期,這次是TO_CHAR函數。爲了說明你的例子,你可以將dd-mm-yyyy轉換爲dd-mm-yyyy hh-mm而不需要存儲該值(我假設你的意思是顯示小時 - 分鐘,分鐘的格式模型是' MI」,因爲‘MM’是月):
SQL> SELECT TO_CHAR(TO_DATE('01-01-2020','DD-MM-YYYY'),'DD-MM-YYYY HH-MI') mydate
FROM DUAL;
MYDATE
----------------
01-01-2020 12-00
需要注意的是你的榜樣,您的日期的時間部分沒有輸入提供,因此它默認爲午夜。要保存在你的日期列中的時間值,你必須在你的輸入提供一個時間值:
SQL> SELECT TO_CHAR(TO_DATE('01/01/2020 10:13','DD/MM/YYYY HH:MI'),'DD-MM-YYYY HH-MI') mydate
FROM DUAL;
MYDATE
----------------
01-01-2020 10-13
SQL>
取決於你想要做什麼,在Oracle系統日期可以通過向一個參考來獲得僞列SYSDATE:
SQL> SELECT TO_CHAR(sysdate,'MM/DD/YYYY HH:MI:SS AM') dt1,
2 TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS') dt2
3 FROM dual;
DT1 DT2
---------------------- -----------------------------
07/01/2011 03:44:30 PM 01-JUL-2011 15:44:30
SQL>
所以環島回答你的問題是,它完全取決於你的輸入日期字符串是什麼格式,您將其轉換成通過格式模型和TO_DATE函數Oracle的日期類型,然後通過TO_CHAR和格式模型將日期項目轉換爲您選擇的顯示格式。至於您提到的「ALTER SESSION」命令,您可以通過在ALTER SESSION命令中指定NLS_DATE_FORMAT參數指定日期轉換的默認格式模型:
SQL> SELECT sysdate FROM dual;
SYSDATE
---------
02-JUL-11
SQL> ALTER SESSION SET nls_date_format='dd-mon-yyyy hh24:mi:ss';
Session altered.
SQL> SELECT sysdate FROM dual;
SYSDATE
--------------------
02-jul-2011 10:39:24