Access与T-SQL中isnull的区别; access isnull函数

今天运行程序发现了一个小bug.是之前用T-sql做的连接改用了Access,使用ISNULL,出现了参数个数不对等问题。

之前的SQL语句是:

select ISNULL(SUM(case costTypewhen '收入' then coseMOney else 0 end),0)

as 收入,

ISNULL(SUM(casecostType when '支出' then coseMOney else 0 end),0)

as支出

from KeepAccounts_AccountsInfo where 1=1

修改后的是:

selectISNULL(SUM(iff(costType='收入',coseMOney,0)),0,SUM(iff(costType='收入',coseMOney,0)

as 收入,

ISNULL(SUM(iff(costType='支出',coseMOney,0)),0,SUM(iff(costType='支出',coseMOney,0)

as支出

from KeepAccounts_AccountsInfo where 1=1

原因一:

在access中,case用iff代替;

case语句格式:case [字段名] when‘值’then[value1]else[value2]end

   解析:当[字段名]=‘值’返回的值是[value1] 否则值是[value2]

iff语句格式:iff([字段名]=‘值’, [value1],[value2] )

   解析:当[字段名]=‘值’返回的值是[value1] 否则值是[value2]

原因二:

IsNull(expression)

必选的 expression参数?(参数:为操作、事件、方法、属性、函数或过程提供信息的值。)是 Variant?(Variant数据类型:变量的默认数据类型,如果 Def type 语句没有生效,则该数据类型没有类型声明字符。Variant可以存储数值、字符串、日期/时间、Null 或 Empty 数据。)类型的值,其中包含数值表达式?(数字表达式:计算结果为数字的任何表达式。表达式可以是变量、常数、函数和运算符的任意组合。)或字符串表达式?(字符串表达式:任一求值为一列连续字符的表达式。表达式的元素可以是:返回字符串或字符串Variant (VarType 8) 的函数;字符串字面值、常量、变量或 Variant。)。


注解

如果 expression 为 Null,则 IsNull 返回True;否则 IsNull 返回 False。如果 expression包含多个变量?(变量:已命名存储位置,所包含的数据能够在程序执行过程中发生变动。每一变量都有名称,在它的作用域级别范围内能够唯一标识该变量。既可以指定数据类型,也可以不指定。),则构成该表达式的任何变量中的Null 都会导致整个表达式返回 True。

Null 值表示 Variant 类型的值包含无效数据。Null与空?(空白:未初始化的 Variant 变量(它返回为 0 的 VarType)的状态。请不要与Null(指示无效数据的变量状态)、包含零长度字符串 (" ")的变量或等于零的数字变量混淆。)不同,后者表示尚未初始化变量。它也与零长度字符串 ("")不同,后者有时指空字符串。


要点 使用 IsNull函数确定表达式是否包含 Null 值。在有些情况下(如 If Var = Null 和 If Var<> Null),您可能预期其值为 True 的表达式始终为False。这是因为任何包含 Null 的表达式本身就为 Null,因此该表达式为 False。

解决办法:

Access也有IsNull函数,但意义和参数却和T-SQL中的不同。

在T-SQL(也就是SQLServer所支持的SQL语言)中,IsNull的作用是把空值替代成指定的值。然而在Access中,IsNull的作用仅仅是判断是否为空值,而且参数的个数也和T-SQL中的不一样,只有一个输入参数。

庆幸的是Access支持iif,所以可以这样去替代:
Select iif(IsNull( express ), value1, value2 ) FromTableName

iif(IsNull( express ), value1, value2)
相当于:
If express Is Null Then
Return value1
Access与T-SQL中isnull的区别; access isnull函数
Else
Return value2
End if

  

爱华网本文地址 » http://www.413yy.cn/a/25101014/197978.html

更多阅读

SQL中EXISTS怎么用 sql exists in的区别

SQL中EXISTS怎么用——简介EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或FalseSQL中EXISTS怎么用——方法/步骤SQL中EXISTS怎么用 1、EXISTS用于检查子查询是否至少会返回一行数据,该

薏米红豆的功效与作用 赤小豆和红豆的区别

薏米红豆的功效与作用——简介薏米红豆的功效主要就是祛湿,能够祛除体内的湿气,非常适合夏季及体内湿气较重的人食用。能当饭吃,是祛湿健脾的佳品。薏米红豆可以做成粥,也可以做成水当茶喝,薏米红豆也可以分开做各种食材的补料使食物更

特许经营与代理、经销的区别;代理和代销的区别 特许经销商

代理人是根据他人授权,按他人意志行事的人。授权的范围可能很小,只是完成两三样特定的工作,也可以通过普遍授权,使代理人拥有充分的行动权力。最根本的一点,代理人不是根据自己的利益行事,在第三方看来,代理人与授权人是没有区别的,代理人所

广州PMP与CPMP的区别 广州pmp培训机构

很多同学对这两种体系的关系不清楚,其实,尽管这两种体系都是项目管理认证,但IPMP与PMP有很大的区别。1、影响力不同尽管国际项目管理协会(IPMA)成立时间早于美国项目管理协会,但其国际影响力却远低于PMI。从目前的认证人数和会员人数上,PMI

第71章:右脑型与左脑型人物的区别

右脑型与左脑型人物的表现相同,但是更棒,但是右脑型会按照自己的方式工作,特别具有智慧,虽然,对右脑型人物有些负面看法,像没有生产力、不成熟的梦想家,但还是能精确完善地完成任何工作,同时享受其中的乐趣,像爱因斯坦和牛顿都是典型的右脑型

声明:《Access与T-SQL中isnull的区别; access isnull函数》为网友霸道小男人分享!如侵犯到您的合法权益请联系我们删除