Oracle
日期類型隱式轉換
oracle什麼時候隱式轉換日期類型?它取決於什麼參數?
我正在執行以下內容:
SELECT SYSDATE - '01-01-01' FROM DUAL
並得到:
SELECT SYSDATE - '01-01-01' FROM DUAL * ERROR at line 1: ORA-01722: invalid number
為什麼 Oracle 不將 varchar ‘01-01-01’ 轉換為 date ?
nls_date_format I have set to 'DD-MM-RR'
當嘗試將字元串轉換為數字時,出現 ORA-01722(“無效數字”)錯誤,但無法將字元串轉換為有效數字。
Nls_date_format 參數有助於將 varchar 隱式轉換為日期類型。
例子:
SQL>INSERT INTO tbl 值 ('01-02-16'); SQL>SELECT ADD_MONTHS('01-02-16',2)
在上面的範例中,由於我們設置了
NLS_DATE_FORMAT
. 在您的情況下,它試圖從 SYSDATE 中提取數字(或者您可以明確告知),但發現字元串不是日期。例子:
SQL>SELECT SYSDATE-'01' FROM dual;
在這裡,這完美地工作並返回從 SYSDATE 中減去 1 天的日期,因為它能夠將字元串轉換為數字。
最好的方法是將 varchar 顯式轉換為日期類型。您可以使用以下查詢從 sysdate 中減去日期(假設您已設置 NLS_DATE_FORMAT=DD-MM-RR):
SQL>SELECT SYSDATE-TO_DATE ('01-01-01');
Oracle 建議使用顯式類型轉換。