likes
comments
collection
share

SQL Server和Access中的条件判断语法(case when和iff)

作者站长头像
站长
· 阅读数 4

很多时候为了程序的可扩展性和准确性等我们会在数据库中把对应bool类型或string类型的字段设置为int型。但是在程序中显示的时候我们希望能显示用户友好的内容,这个时候我们就需要把查找到的结果转换成用户友好的结果。要达到这个目的有几种方法可行,可以在查询的时候直接按照要求判断输出,也可以在查询到结果后在程序中通过相应方法更改结果后显示。本文讨论第一种方法。 使用SQL Server数据库和使用Access数据库所用到的语句不同,下面分别叙述:

SQL Server:

使用case when语句。

语法如下:

case 数据库字段
when 条件1 then 结果1
when 条件2 then 结果2
……
else 上面条件都不满足时的结果
end

点击这里这里,查看msdn对其的介绍。

例子

select UserName,case UserRole when '0' then '普通用户' when '1' then '管理员' end as 用户角色 from Users

根据长度截断字符串

select case when LEN(Title)>20  then SUBSTRING(Title,0,21) else Title end as Title from Articles

Access:

使用iff()函数。

语法如下:

IIf(expr, truepart, falsepart)

点击这里,查看Microsoft Office对其的介绍。

IIf 函数语法的参数说明:
expr            必需。要计算其值的表达式。
truepart        必需。expr为True时返回的值或表达式。
falsepart       必需。expr为False时返回的值或表达式。

意思是:当条件成立时,返回正确结果;当条件不成立时,返回错误结果。

注意: 尽管IIf只返回truepart和falsepart中的一个,但始终会对这两部分进行计算。因此,应当注意是否出现无谓的副作用。例如,如果计算falsepart时导致除数为零错误,那么即使expr为True,也会产生错误。

例子

select iif(IfPaid=1,'是','否') as 是否已付款 from Accounts

根据长度截断字符串

select iif(LEN(Title)>20,left(Title,20),Title) as Title from Articles

注意:

如果是要把数据绑定到DataGridView,而DataGridView的列事先已经定义好了的话,把查询语句中通过此方法获得值的列的as后的定义赋值给对应列的DataPropertyName即可显示出查询到的值。比如把上面语句的Title赋值给DataGridView添加的对应列的DataPropertyName即可显示数据库中原Title列中的值截取前20个字符后的值。