2011-07-01 67 views
1

我正在使用Oracle Express數據庫,並且我想知道如何將日期格式-從dd-mm-yyyy更改爲dd-mm-yyyy hh-mm。另外,我聽說過alter session,但我不知道如何在Perl中使用它。Perl和Oracle DB - 幫助

這是我做過什麼,到目前爲止:

my $sth = $dbh->prepare("INSERT INTO Perl 
          (A_FIELD,B_FIELD,C_FIELD,TIME_STAME) 
         VALUES 
          (?,?,?,TO_DATE(?,'DD/MM/YYYY HH24:MI'))"); 

回答

0

如果傳入的日期字符串在MM-yyyy格式,那麼你可以用下面(TO_DATE(?,'MM-YYYY'))的語句將字符串轉換爲日期:

$sth = $dbh->prepare("INSERT INTO Perl (A_FIELD,B_FIELD,C_FIELD,TIME_STAME) VALUES (?,?,?,TO_DATE(?,'MM-YYYY'))"); 
3

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