AO和SQL SERVER软件中使用函数区别,本文主要内容关键词为:函数论文,区别论文,软件论文,AO论文,SQL论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
随着AO现场审计实施系统在审计系统中的广泛应用,给审计工作带来极大的方便。但大部分审计人员对SQL SERVER软件比较熟悉,而AO软件是基于ACCESS数据库开发的软件,查询使用的函数和SQL SERVER有很大的差别,往往因不了解两者函数的区别,给AO软件的推广带来不便。笔者在审计过程中发现,在两款软件中相同类型的查询通过使用不同的函数能取得同样的效果。以下是笔者在审计过程中收集的几个相同功能函数:
一、中间截取字符串函数substring和mid
查询要求:从18位身份证号码截取出生年月查询
1.Substring是SQL SERVER中使用的中间截取函数,使用方法为substring(expression,start,length),expression:字符串、二进制字符串、文本、图像、列或包含列的表达式。但不包含聚合函数的表达式;start:整数或可以隐式转换为int的表达式,指定子字符串的开始位置;length整数或可以隐式转换为int的表达式,指定了字符串的长度。
查询语法为:
Select substring(身份证号,7,8)as出生年月
From表名
2.Mid是AO中使用的中间截取字符串函数,使用方法为mid(expression,start,length),字段含义同上。
查询语法为:
Select mid(身份证号,7,8)as出生年月
From表名
二、模函数%和mod
查询要求:查询现金支出为整万元的凭证
1.模函数是用来求两数相除后的余数,在sql server中用%,格式为number % divisor,number为被除数,Divisor为除数。查询语法为:
Select*
From现金日记账
Where贷方金额% 10000=0
需要注意的是,上述查询中“贷方金额”的数据类型一定要是整形(int),如果不是需要用cast进行转换,即:cast(贷方金额as int)。
2.在AO中函数格式为:number mod divisor,即是两个数值表达式作除法运算后的余数,number为被除数。Divisor为除数。如果divisor为零,函数MOD返回错误值
DIV/0!。查询语法为:
Select*
From现金日记账
Where贷方金额mod 10000=0
以上两款软件查询结果和字段的数据类型均相同,使用方法也一样。
三、搜索函数case when和iif
查询要求:计算个人所得税查询
1.在sql server中,使用case when搜索函数可以动态更新查询结果。
查询语法:
Select姓名,薪金总额,case
When薪金总额-2000 between 0 and 500 then(薪金总额-2000)*0.05
When薪金总额-2000 between 500.1 and 2000 then (薪金总额-2000)*0.1-25
When薪金总额-2000 between 2000.1 and 5000 then(薪金总额-2000)*0.15-125
When薪金总额-2000 between 5000.1 and 20000 then (薪金总额-2000)*0.2-375
When薪金总额-2000 between 20000.1 and 40000 then (薪金总额-2000)*0.25-1375
When薪金总额-2000 between 40000.1 and 60000 then (薪金总额-2000)*0.3-3375
When薪金总额-2000 between 60000.1 and 80000 then (薪金总额-2000)*0.35-6375
When薪金总额-2000 between 80000.1 and 100000 then (薪金总额-2000)*0.4-10375
When薪金总额-2000>100000 then(薪金总额-2000)*0.45-15375
End应缴个人所得税
From职工薪金汇总表
2.在AO软件中,使用iif(expr,truepart,falsepart)函数来进行搜索查询,其中expr:必要参数,用来判断真伪的表达式;truepart:必要参数,如果expr为True,则返回这部分的值或表达式;falsepart:必要参数,如果expr为False,则返回这部分的值或表达式。
查询语法为:
select[姓名],[薪金总额],iif([薪金总额]-2000<=500,([薪金总额]-2000)*0.05,iif([薪金总额]-2000<=2000,([薪金总额]-2000)*0.1-25,iif([薪金总额]-2000<=5000,([薪金总额]-2000)*0.15-125,iif([薪金总额]-2000<=20000,([薪金总额]-2000)*0.2-375,iif([薪金总额]-2000<=40000,([薪金总额]-2000)*0.25-1375,iif([薪金总额]-2000<=60000,([薪金总额]-2000)*0.3-3375,iif([薪金总额]-2000<=80000,([薪金总额]-2000)*0.35-6375,iif([薪金总额]-2000<=100000,([薪金总额]-2000)*0.4-10375,([薪金总额]-2000)*0.45-15375))))))))as应缴个人所得税
from[业务 职工薪金汇总表$]
where[薪金总额]-2000>0
需要注意的是,如果嵌套的层数多,在函数的最后有很多括号,多一个或少一个语句都无法执行,前面有几个iif最后就应有多少个括号。
四、内连接函数inner
在sql server中inner可以省略不对语句执行结果没有影响。
在AO中,如果是内连接,如想省略不写,则要改变语句的写法。如以下是内连接语句:
select[业务__四级评价指标].zbdm,[业务__四级评价指标].vijqz,[业务__四级评价指标].zbmc,[wjhzb].fs
from[业务__四级评价指标]innerjoin[wjhzb]on[业务__四级评价指标$].zbdm=[wjhzb].zbdm
如果要省略inner就必须将语句改成下面形式:
select[业务__四级评价指标].zbdm,[业务__四级评价指标].vijqz,[业务__四级评价指标].zhmc,[wjhzb].fs
from[业务__四级评价指标],[wjhzb]
where [业务__四级评价指标$].zbdm=[wjhzb].zbdm
省略了inner后,要将on后的连接条件写在where条件后,且连接的表之间要以“.”隔开,否则语句就无法执行。
AO软件在给审计工作带来极大的方便的同时,由于sql server中的许多函数在其中无法执行,使得AO软件的功能不能得到充分发挥,使得很多审计人员认为AO软件在业务数据分析方面不如sql server方便。其实了解了两者部分函数的区别后,便能更好地运用AO软件进行审计。