場景:
存在一個用戶白名單表,提供了此用戶的用戶名和地區(qū)信息,判斷此用戶是否在此白名單表中。
如:
姓名 白名單地區(qū)
張三 中國,美國
則可使用如下語句:
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函數(shù)說明:返回其參數(shù)中第一個非空表達式,這里使用即 area_list
2、白名單地區(qū)為多個國家以逗號分隔,則使用like concat的方式,能查詢出某個國家是否被包含其中。
補充:PostgreSQL - null和''的區(qū)別與判斷以及COALESCE函數(shù)
null和''的區(qū)別與判斷
null是一種類型,''是空字符串,打個比方,''是你參加了考試且得了零分,而null則是你壓根就沒有參加考試。
如果要在sql中對兩者進行判斷,是有區(qū)別的:
//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函數(shù)
COALESCE函數(shù)是返回參數(shù)中的第一個非null的值,它要求參數(shù)中至少有一個是非null的,如果參數(shù)都是null會報錯。
select COALESCE(null,null); //報錯
select COALESCE(null,null,now()::varchar,''); //結(jié)果會得到當(dāng)前的時間
select COALESCE(null,null,'',now()::varchar); //結(jié)果會得到''
//可以和其他函數(shù)配合來實現(xiàn)一些復(fù)雜點的功能:查詢學(xué)生姓名,如果學(xué)生名字為null或''則顯示“姓名為空”
select case when coalesce(name,'') = '' then '姓名為空' else name end from student;
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- postgresql SQL語句變量的使用說明
- PostgreSQL 正則表達式替換-使用變量方式
- postgresql 導(dǎo)入數(shù)據(jù)庫表并重設(shè)自增屬性的操作
- postgresql coalesce函數(shù)數(shù)據(jù)轉(zhuǎn)換方式
- postgresql 實現(xiàn)修改jsonb字段中的某一個值
- postgresql 存儲函數(shù)調(diào)用變量的3種方法小結(jié)