/ 中存储网

审计工作常用主流数据库管理系统 常用SQL语句差异性对比和分析

2017-06-07 17:41:23 来源:中存储

随着整个社会信息化的飞速发展,审计工作中计算机技术发挥着越来越重要的用,如:提高审计工作精确性、加强审计工作管理、提升数据透明性和分享性等。数据库技术可以说是计算机审计中的核心技术,它是被审单位(例如商业银行、国有企业等)中最具有战略性的资产之一。数据库中存有与被审计单位经营活动密切相关的信息,因此熟悉并使用审计工作中常遇到的数据库管理系统(ACCESS、SQL SERVER和ORACLE)是成为一名优秀审计人员的必备条件。其常用系统函数有较多差异,笔者对三种主流数据库管理系统中SQL语句应用差异性进行了总结,避免在实际审计工作中错用和混淆SQL语句影响工作效率。

一、字符串操作函数

审计工作中,发现经常要用到字符串操作函数。例:查找1986年出生的人,出生字段为YYYYMMDD,那么就要截取该字段字符串前4位进行判断等等。

1.截取字符串(返回字符串中从start开始的length长度个字符)函数:

ACCESS:

Mid(字符串,start,length),例:mid("abcd",1,2) 返回"ab"。

SQL SERVER:

Substring(字符串,start, length),例:substring ( ‘abcd’ , 1,2) 返回"ab"。

ORACLE:

Substr(字符串,start, length),例:substr( "abcd" , 1,2) 返回"ab"。

2.返回大写字母函数:

ACCESS:

Ucase(字符串)。例:Ucase("abc"),返回”ABC”。

SQL SERVER:

      Upper(字符串)。例:Upper (‘abc’),返回”ABC”。

ORACLE:

      Upper(字符串)。例:Upper (‘abc’),返回”ABC”。

3.返回小写字母函数:

ACCESS:

Lcase(字符串)。例:Lcase("ABC"),返回"abc"。

SQL SERVER:

       Lower(字符串)。例:Lower(‘ABC’),返回"abc"。

ORACLE:

       Lower(字符串)。例:Lower(‘ABC’),返回"abc"。

4.查询子串在字符串中出现的位置函数:

ACCESS:

InStr(字符串1,字符串2)。例:InStr("abc","b"),返回2,字符串2为子串。

SQL SERVER:

       CharIndex(字符串2,字符串1[,start])。例:CharIndex (‘b’,‘abcbcb’,3),返回4,字符串2为子串。start参数若省略则从位置0开始搜索。

ORACLE:

      InStr(字符串1,字符串2,[,start1[,start2]])。从字符

串1的第start1个字符开始搜索字符串2在字符串1中

第start2次出现的位置。例:InStr("abcbcbc","b",2,2),

返回4。

5.字符串连接函数:

ACCESS:

&。例:a&b,返回ab。

SQL SERVER:

+。例:a+b,返回ab。

ORACLE:

||。例:a||b,返回ab。

二、时间函数

取当前系统时间,实际工作中经常要构造当前时间字段来确认操作时间。

ACCESS:

select Now()。

SQL SERVER:

select Getdate()。

ORACLE:

select sysdate for dual。

三、数据类型转换函数,审计工作中经常要将各种类型数据进行转换,偏于显示和计算。

ACCESS:

CBool(expression),CByte(),CCur(),CDate(),CDbl( ) CDec( ),CInt( ),CLng( ),CSng( ),CStr( ),CVar( ),函数参数同CBool。

SQL SERVER:

         (1)Cast(<expression> as <data_type>[ length ])。例:Cast(1234 as vachar(20)),返回可变长字符串’1234’。

      (2)Convert(<data_ type>[ length ], <expression> [,style])。前两个参数位置同Cast相反,用法相同,第三个参数style可选择输出格式。例: Convert(varchar(30), getdate(), 101),返回11/01/ 2011;Select Convert (varchar(30), getdate(),102),返回2011.11.01,即日期格式不同。

     ORACLE:

 To_date(字符串[, ‘style’])。style为格式。例:

To_date(‘2011-08-02 21’, ‘YYYY-MM-DD HH24’)。

To_numeber(字符串[, ‘style’])。例: To_numeber (’RMB234567.1230’, ‘L999999.000’),返回234567.123。

To_char(数字或时间[, ‘style’])。例:To_char(sysdate, ‘yyyy-mm-dd’),返回2011-08-02。

四、判断取值函数,判断取值是经常要用到的语句,在不同情况下进行不同的操作

     ACCESS:

          Iff(判断条件,值1,值2)。如果满足条件则取值1,否则取值2。例:Iff(len(title))10,left(title,10),title),如果title长度大于10则取前10个字符,否则取原值。

 SQL SERVER:

      CASE WHEN 判断条件 THEN 值1 [WHEN ...] [ELSE 值n] END。例:CASE   WHEN sex =‘0’ THEN ‘男’  WHEN  sex = ‘1’ THEN ‘女’ ELSE ‘性别错误’ END。如果变量sex为0则为男,如果为1则为女,否则性别输入错误。

ORACLE:

          DECODE(变量, 判断条件1, then 值1, 判断条件2,then 值2, 判断条件3, then 值3,……,值n )。例:DECODE(oprater, 1, ‘+’, 2, ‘-’, 3, ‘*’, 4, ‘/’, ‘其它运算符’)。

五、求日期相差天数函数,在审计国税相关部门时,要计算滞纳金等数据就要计算延期交税的天数,因此要用到日期相差天数函数。

    ACCESS:

Datediff(interval, date1, date2[, firstdayofweek [,firstweekofyear]])。Interval为间隔参数,计算date1与date2之间(data2-data1)的间隔,first dayofweek可选。指定一个星期的第一天。如果未予指定,则以星期日为第一天。firstweekofyear可选。指定一年的第一周。如果未予指定,则以包含 1 月 1 日的星期为第一周。例:DateDiff ("d","2010/1/1", "2011/1/1"),返回现在与2010年1月1日相差的365天。

SQL SERVER:

        Datediff(interval, date1, date2)。参数含义同ACCESS,但请注意参数取值和格式。例:SELECT Datediff(day,‘2010/1/1’, ‘2011/1/1’),同样返回365天。

ORACLE:

        ORACLE中没有类似Datediff的函数,但可以用日期转换函数to_date直接相减。例:to_date(‘2010-1-1’, ‘yyyy-mm-dd’) - to_date(‘2011-1-1’, ‘yyyy-mm- dd’),同样返回365天。

六、生成新表语句,审计工作中经常要将疑点数据生成新的表格,因此要用到生成新表语句。

ACCESS:

Insert into a (select * from b),会报错!应将两端括号去掉:Insert into a select * from b。

SQL SERVER:

有无两端括号均正确。

ORACLE:

有无两端括号均正确。