簡體   English   中英

為什么當字段為 null 時使用 to_char function 會給我錯誤結果?

[英]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 錯誤

我試過這些:

  1. NVL2(Shipped_EXpired_Date,TO_CHAR(x,'YYYYMMDDHH24MISS'),'19900101') Shipped_EXpired_Date

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM