postgresql 中的COALESCE()函數使用小技巧
場景:
存在一個用戶白名單表,提供瞭此用戶的用戶名和地區信息,判斷此用戶是否在此白名單表中。
如:
姓名 白名單地區
張三 中國,美國
則可使用如下語句:
SELECT ID, user, area_list FROM t_white_user WHERE user = #{ user, jdbcType = VARCHAR } AND ( COALESCE (area_list, '') LIKE CONCAT ( '%' ,#{ country, jdbcType = VARCHAR }, '%' ) OR area_list IS NULL ) LIMIT 1
技巧點分析:
1、coalesce函數說明:返回其參數中第一個非空表達式,這裡使用即 area_list
2、白名單地區為多個國傢以逗號分隔,則使用like concat的方式,能查詢出某個國傢是否被包含其中。
補充:PostgreSQL – null和”的區別與判斷以及COALESCE函數
null和”的區別與判斷
null是一種類型,”是空字符串,打個比方,”是你參加瞭考試且得瞭零分,而null則是你壓根就沒有參加考試。
如果要在sql中對兩者進行判斷,是有區別的:
//null隻能和is或is not搭配,不能使用=、!=或者<> select * from student where name is null; select * from student where name is not null; //''的判斷可以使用=、!=或者<> select * from student where name = ''; select * from student where name != ''; select * from student where name <> '';
使用COALESCE函數
COALESCE函數是返回參數中的第一個非null的值,它要求參數中至少有一個是非null的,如果參數都是null會報錯。
select COALESCE(null,null); //報錯 select COALESCE(null,null,now()::varchar,''); //結果會得到當前的時間 select COALESCE(null,null,'',now()::varchar); //結果會得到'' //可以和其他函數配合來實現一些復雜點的功能:查詢學生姓名,如果學生名字為null或''則顯示“姓名為空” select case when coalesce(name,'') = '' then '姓名為空' else name end from student;
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- 基於mybatis like %%的問題
- 淺談PostgreSQL和SQLServer的一些差異
- sql索引失效的情況以及超詳細解決方法
- MySQL優化之如何寫出高質量sql語句
- MySQL 基礎常用命令總結