Oracle

日期類型隱式轉換

  • February 16, 2016

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 建議使用顯式類型轉換。

引用自:https://dba.stackexchange.com/questions/129333