PostgreSql處理Null與空字符串


在使用 PostgreSql時,實際場景中會出現某個字段為空或空字符串,就取另外一個字段或給默認值,在Oracle數據庫中用函數NVL就行實現,那么在PostgreSql可以使用COALESCE函數,與OracleNVL一樣接收兩個參數。區別在於NVL函數的第一個參數對NULL與空字符串,都識別為空,而COALESCE只識別NULL
比如下面數據的order_code字段是NULLcus_name字段是空字符串:
在這里插入圖片描述
使用函數COALESCE設置NULL與空字符串的默認值,看下對空字符串是否生效。

select
	coalesce(cus_name, 'AA') as cus_name,
	coalesce(order_code, 'S01') as order_code
from
	t_order;

![在這里插入圖片描述](https://img-blog.csdnimg.cn/8afa2c8088454b8ebaa4c06925f40f94.png

從結果可以看出,cus_name字段為空字符串,結果還是空字符串,order_code字段為NULL,結果設置了默認值。那么是否可以將cus_name的空字符串也設置成功默認值呢?這里可以使用case when語句。

select
	(case
		when cus_name is null
		or cus_name = '' then 'AA'
		else cus_name
	end) as cus_name,
	coalesce(order_code, 'S01') as order_code
from
	t_order;

在這里插入圖片描述
從結果上看已經實現我們想要的效果,但是使用case when來處理空字符串,從SQL語句簡潔來看不太舒服,可以參考如下寫法:

select
	coalesce(nullif(cus_name,''),'AA') as cus_name, 
	coalesce(order_code, 'S01') as order_code
from
	t_order;

這里使用到了NULLIF函數,意思是第一個參數與第二個參數一致,就返回NULL
在這里插入圖片描述
結果與使用case when效果一樣,從SQL的簡潔來看,個人更偏向第二種來判空。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM