2017-10-05 60 views
1

我有任何地方負十進制值(負值後的符號)蜂巢改造NULL指針異常

當我想保存這個蜂房,我想我要負號存儲爲10.35-在源系統價值之前價值如-10.35。

CASE WHEN substring(trim(colName), -1) = '-' THEN 
abs(regexp_replace(colName, '[^0-9.]', ''))*-1 ELSE 
abs(regexp_replace(colName, '[^0-9.]', '')) END 

上述轉換工作正常,但如果列包含空值或空值,則會拋出空指針異常。

我該如何處理這個異常?

回答

0

你不需要ABS()函數:

select CASE WHEN trim('10.35-') rlike('-$') 
       THEN regexp_replace('10.35-', '[^0-9.]', '')*-1 
       ELSE regexp_replace('10.35-', '[^0-9.]', '') 
     END 

回報-10.35

在空值的情況下,它會返回'' - 空值。使用CAST(雙倍),如果你在這種情況下,需要空:

select CASE WHEN '' rlike('-$') 
       THEN regexp_replace('', '[^0-9.]', '') *-1 
      ELSE cast(regexp_replace('', '[^0-9.]', '') as double) 
     END 

返回null

但是,如果你想使用abs()然後cast(as double)第一,它會轉換爲空字符串爲null,ABS將不工作例外返回null

select abs(cast ('' as double)) 

回報null