[英]Why does converting date to_char() throw ORA-01830 error when placed in a case-then?
[英]Why does using to_char function give me error results when field is null?
如果我有 col Shipped_EXpired_Date 是日期數據類型,但有一個 null 字段,我想 select 它使用
To_char (Shipped_EXpired_Date,YYYYMMDDHH24MISS)
由於轉換 null 數據,我有 or 錯誤
我試過這些:
NVL2(Shipped_EXpired_Date,TO_CHAR(x,'YYYYMMDDHH24MISS'),'19900101') Shipped_EXpired_Date
TO_CHAR(NVL(Shipped_EXpired_Date,'1990-01-01'),'YYYYMMDDHH24MISS') Shipped_EXpired_Date
按邏輯解決方案 2 是對的,但也是錯誤的。
在第二種情況下,您正在混合和匹配數據類型,這意味着可能會發生一些隱式轉換,因此您在 session 級別的 NLS 設置可能會制定(或破壞)您的解決方案。
將所有內容保留為 DATE 直到最終轉換為字符串,您會沒事的。
SQL> create table t ( Shipped_EXpired_Date date );
Table created.
SQL> insert into t values (null);
1 row created.
SQL> select NVL2(Shipped_EXpired_Date,TO_CHAR(Shipped_EXpired_Date ,'YYYYMMDDHH24MISS'),'19900101') Shipped_EXpired_Date from t;
SHIPPED_EXPIRE
--------------
19900101
SQL> select TO_CHAR(NVL(Shipped_EXpired_Date,'1990-01-01') ,'YYYYMMDDHH24MISS') Shipped_EXpired_Date from t;
select TO_CHAR(NVL(Shipped_EXpired_Date,'1990-01-01') ,'YYYYMMDDHH24MISS') Shipped_EXpired_Date from t
*
ERROR at line 1:
ORA-01861: literal does not match format string
SQL> select TO_CHAR(NVL(Shipped_EXpired_Date,date '1990-01-01') ,'YYYYMMDDHH24MISS') Shipped_EXpired_Date from t;
SHIPPED_EXPIRE
--------------
19900101000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.