当我要查询一个地址簿信息的时候,碰到了详细地址在数据库中由省、市、县以及详细街道组成,需要将其连接为一个字段,此时将多列用 + 号连接即可,但此时出现地址如:“北京市 市辖区 东城区 **街道”,但实际上我们想显示的是“北京市 东城区 **街道”,所有必须当碰到市级出现“市辖区”或者“县”时,则过滤为空“” ,于是,SQL语句应写为:
select b.id,b.name,(p.ProvinceName+ (case when c.CityName ='市辖区' then ''
when c.CityName ='县' then '' end)+
cu.CountyName+b.detailAddress) as detailAddress,
b.companyName,b.postcode,b.mobilePhone,b.companyPhone,b.otherPhone,b.email,b.qq,b.remark
from Book b, Province p, City c, County cu
where p.ProvinceID= b.provinceId and c.CityID= b.cityId and cu.CountyID = b.countyId
注意,上面的语句只适应于SQL server 、 orcal 等,而小型的Access、MySQL却不能识别 case when then end 关键字,所有在使用此类小型数据库的时候必须作如下更改,得到相同效果
select b.id, b.name,
(p.ProvinceName + (iif(c.CityName='市辖区' or c.CityName='县','',c.CityName))
+ cu.CountyName + b.detailAddress) as detailAddress,
b.companyName,b.postcode,b.mobilePhone,b.otherPhone,b.email,b.qq,b.remark
from Book b, Province p, City c, County cu
where p.ProvinceID = b.provinceId and c.CityID = b.cityId and cu.CountyID = b.countyId
------------------------------------------------------------------------------------------------------------
IIf 函数
取决于表达式的计算结果,返回两部分之一。
语法
IIf(expr, truepart, falsepart)
IIf 函数语法具有以下命名参数:
部分 说明
expr 必选。要计算的表达式。
truepart 必选。在 expr 为 True 时返回的值或表达式。
falsepart 必选。在 expr 为 False 时返回的值或表达式。
说明
IIf 总是同时计算 truepart 和 falsepart,即使只返回这两者之一。因此,应注意意外的副作用。例如,如果计算 falsepart 会导至除以零的错误,则即使 expr 为 True,也会发生错误。