2014-10-31 113 views
0

得到錯誤的Oracle SQL CASE WHEN ORA-00932:不一致的數據類型:預期CHAR了數00932. 00000 - 「不一致的數據類型:有望%S得了%的」

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 00932. 00000 - "inconsistent datatypes: expected %s got %s"

當我運行以下查詢

SELECT distinct 
CASE when t.cancelled = 'TRUE' then '0' 
else t.amount END AMOUNT, 
FROM table t 

如果我運行它的數字或其他輸出的文本,就像這樣,它的工作原理。

SELECT distinct 
CASE when t.cancelled = 'TRUE' then '0' 
else 'xxx' END AMOUNT, 
FROM table t 
+1

是t.amount多少? – NullUserException 2014-10-31 15:56:51

+0

它是一個數字是 – Matt 2014-10-31 15:57:17

+1

在這種情況下,將其轉換爲字符類型。 (即:'SELECT ... else TO_CHAR(t_amount)...') – NullUserException 2014-10-31 15:57:31

回答

4

使用0而不是'0'。金額是一個數字,數字不被引用。

SELECT distinct 
CASE when t.cancelled = 'TRUE' then 0 
else t.amount END AMOUNT, 
FROM table t 
+0

+1。用鼠標點擊擊敗我。 – 2014-10-31 15:58:24

+0

@Matt,你的查詢有0'是'varchar,我把它作爲0 – radar 2014-10-31 16:07:01

+0

很好的解釋。我只是繼續以普通人的話作爲解答進一步解釋,希望你不會介意。我提到的歸屬地:-) – 2014-10-31 16:13:19

2

除了由@RADAR答案,

的原因的錯誤是t.amount字段是NUMBER數據類型,而不是一個string

您的CASE表達式在內部嘗試將STRING設置爲NUMBER數據類型。

正如RADAR的答案中所建議的,使用零作爲數字而不是字符串。

0

使用try to_number(t.amount)

SELECT distinct 
CASE when t.cancelled = 'TRUE' then 0 
else to_number(t.amount) END AMOUNT, 
FROM table t 
相關問題