當(dāng)前位置:首頁(yè) >  站長(zhǎng) >  數(shù)據(jù)庫(kù) >  正文

postgresql 中的COALESCE()函數(shù)使用小技巧

 2021-05-22 16:48  來(lái)源: 腳本之家   我來(lái)投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)

存在一個(gè)用戶白名單表,提供了此用戶的用戶名和地區(qū)信息,判斷此用戶是否在此白名單表中。

如:

姓名 白名單地區(qū)

張三 中國(guó),美國(guó)

則可使用如下語(yǔ)句:

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

 

技巧點(diǎn)分析:

1、coalesce函數(shù)說(shuō)明:返回其參數(shù)中第一個(gè)非空表達(dá)式,這里使用即 area_list

2、白名單地區(qū)為多個(gè)國(guó)家以逗號(hào)分隔,則使用like concat的方式,能查詢出某個(gè)國(guó)家是否被包含其中。

補(bǔ)充:PostgreSQL - null和''的區(qū)別與判斷以及COALESCE函數(shù)

null和''的區(qū)別與判斷

null是一種類型,''是空字符串,打個(gè)比方,''是你參加了考試且得了零分,而null則是你壓根就沒(méi)有參加考試。

如果要在sql中對(duì)兩者進(jìn)行判斷,是有區(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ù)中的第一個(gè)非null的值,它要求參數(shù)中至少有一個(gè)是非null的,如果參數(shù)都是null會(huì)報(bào)錯(cuò)。

select COALESCE(null,null); //報(bào)錯(cuò)
select COALESCE(null,null,now()::varchar,''); //結(jié)果會(huì)得到當(dāng)前的時(shí)間
select COALESCE(null,null,'',now()::varchar); //結(jié)果會(huì)得到''
//可以和其他函數(shù)配合來(lái)實(shí)現(xiàn)一些復(fù)雜點(diǎn)的功能:查詢學(xué)生姓名,如果學(xué)生名字為null或''則顯示“姓名為空”
select case when coalesce(name,'') = '' then '姓名為空' else name end from student;

文章來(lái)源:腳本之家

來(lái)源地址:https://www.jb51.net/article/204892.htm

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)文章

熱門排行

信息推薦