当前位置:K88软件开发文章中心编程全书编程全书01 → 文章内容

oracle与sql的区别(常用函数)

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 1:51:33

:2010-01-11 21:03:00

导读:关于Oracle和SQL Server之间的区别,已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别。在这篇文章里面,我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别,并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法。与此同时,我不会再论讨对于应用程序来说,两个平台之间显而易见的区别,例如表的分割和索引。

许多软件公司都理解开发不依赖于特定数据库类型(例如Oracle、SQL Server、DB2)的应用程序的重要性,它可以让客户们选择自己习惯的平台。一般来说,软件开发人员都能够识别出他们的负责数据库维护的客户,和必须使用现有平台和个性化的客户。

关于Oracle和SQL Server之间的区别,已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别。在这篇文章里面,我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别,并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法。与此同时,我不会再论讨对于应用程序来说,两个平台之间显而易见的区别,例如表的分割和索引。

定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库,想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的,这是一家志愿者成员的组织(用私人基金运转),他们在有关设备和程序等广泛领域内开发了国家承认的标准。在数据库领域, ANSI定义了编写SQLming令的标准,假设ming令可以运行在任何的数据库上,而不需要更改ming令的语法。

    ODBC是开放数据库连接(ODBC)接口,微软定义的,它可以让应用程序访问数据库管理系统(DBMS)中的数据,使用SQL作为访问数据的标准。ODBC允许最大的互联性,这意味着一个单个的应用程序可以访问不同的数据库管理系统。然后,应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上。 OLE DB是ODBC的继承者,是一组允许例如基于VB、C++、Access等任何可以连接到类似SQL Server、Oracle、DB2、MySQL等后台的“前台”的软件组件。在许多种情况下,OLE DB组件都比原有的ODBC提供了好得多的性能。

    JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库,SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间,进行不依赖于数据库的连接的行业标准。JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口。真实世界中的通用接口不幸的是,并不是所有数据库级别的ming令都是ANSI,每个数据库平台都有自己的扩展功能。对于ANSI或者通用接口,一般来说都代表着几本功能,因此也可能意味着丧失了性能方面的竞争力。对于小型数据库和小型应用程序来说,要维护对数据库的通用访问是简单的,但是当数据库和/或应用程序变得越来越大,越来越复杂,你就不得不向代码中添加功能。

    SQL Server和Oracle的常用函数对比

一、数学函数

    1.绝对值
    S:select abs(-1) value
    O:select abs(-1) value from dual

    2.取整(大)
     S:select ceiling(-1.001) value
    O:select ceil(-1.001) value from dual

    3.取整(小)
    S:select floor(-1.001) value
    O:select floor(-1.001) value from dual

    4.取整(截取)
    S:select cast(-1.002 as int) value
    O:select trunc(-1.002) value from dual

    5.四舍五入
    S:select round(1.23456,4) value 1.23460
    O:select round(1.23456,4) value from dual 1.2346

    6.e为底的幂
    S:select Exp(1) value 2.7182818284590451
    O:select Exp(1) value from dual 2.71828182

    7.取e为底的对数
    S:select log(2.7182818284590451) value 1
    O:select ln(2.7182818284590451) value from dual; 1

    8.取10为底对数
    S:select log10(10) value 1
    O:select log(10,10) value from dual; 1

    9.取平方
    S:select SQUARE(4) value 16
    O:select power(4,2) value from dual 16

    10.取平方根
    S:select SQRT(4) value 2
    O:select SQRT(4) value from dual 2

    11.求任意数为底的幂
    S:select power(3,4) value 81
    O:select power(3,4) value from dual 81

    12.取随机数
    S:select rand() value
    O:select sys.dbms_random.value(0,1) value from dual;

    13.取符号
    S:select sign(-8) value -1
    O:select sign(-8) value from dual -1

:2010-01-11 21:03:00
二、三角函数相关

    14.圆周率
    S:SELECT PI() value 3.1415926535897931
    O:不知道

    15.sin,cos,tan (参数都以弧度为单位)
    例如:select sin(PI()/2) value得到1(SQLServer)

    16.Asin,Acos,Atan,Atan2 返回弧度

    17.弧度角度互换(SQLServer,Oracle不知道)
    DEGREES:弧度-〉角度
    RADIANS:角度-〉弧度

三、数值间比较

    18. 求集合最大值
    S:select max(value) value from
       (select 1 value    union    select -2 value    union    select 4 value    union    select 3 value) a
    O:select greatest(1,-2,4,3) value from dual

    19. 求集合最小值
    S:select min(value) value from   
       (select 1 value    union    select -2 value    union    select 4 value    union    select 3 value) a
    O:select least(1,-2,4,3) value from dual

    20.null值的处理(F2中的null以10代替)
    S:select F1,IsNull(F2,10) value from Tbl
    O:select F1,nvl(F2,10) value from Tbl

  四、字符串函数

    21.求字符序号
    S:select ascii('a') value
    O:select ascii('a') value from dual

    22.从序号求字符
   S:select char(97) value
   O:select chr(97) value from dual

    23.连接
    S:select '11'+'22'+'33' value
    O:select CONCAT('11','22')||33 value from dual

    23.子串位置 --返回3
    S:select CHARINDEX('s','sdsq',2) value
    O:select INSTR('sdsq','s',2) value from dual

    23.模糊子串的位置 --返回2,参数去掉中间%则返回7
    S:select patindex('%d%q%','sdsfasdqe') value
    O:oracle没发现,但是instr可以通过第四个参数控制出现次数select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

    24.求子串
    S:select substring('abcd',2,2) value
    O:select substr('abcd',2,2) value from dual

    25.子串代替 返回aijklmnef
    S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
    O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

    26.子串全部替换
    S:Replace
    O:select Translate('fasdbfasegas','fa','我' ) value from dual

    27.长度
    S:len,datalength
    O:length

    28.大小写转换 lower,upper

 29.单词首字母大写
    S:没发现
    O:select INITCAP('abcd dsaf df') value from dual

    30.左补空ge(LPAD的第一个参数为空ge则同space函数)
    S:select space(10)+'abcd' value
    O:select LPAD('abcd',14) value from dual

    31.右补空ge(RPAD的第一个参数为空ge则同space函数)
    S:select 'abcd'+space(10) value
    O:select RPAD('abcd',14) value from dual

    32.删除空ge
    S:ltrim,rtrim
    O:ltrim,rtrim,trim

    33. 重复字符串
    S:select REPLICATE('abcd',2) value
    O:没发现

    34.发音相似性比较(这两个单词返回值一样,发音相同) 
    S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
    O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
    SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差返回0-4,4为同音,1最高

上一页  

:2010-01-11 21:03:00

 五、日期函数

    35.系统时间
    S:select getdate() value
    O:select sysdate value from dual

    36.前后几日
    直接与整数相加减

    37.求日期
   S:select convert(char(10),getdate(),20) value
   O:select trunc(sysdate) value from dual
       select to_char(sysdate,'yyyy-mm-dd') value from dual

    38.求时间
   S:select convert(char(8),getdate(),108) value
   O:select to_char(sysdate,'hh24:mm:ss') value from dual

    39.取日期时间的其他部分
    S:DATEPART和DATENAME函数(第一个参数决定)
    O:to_char函数第二个参数决定
    参数---------------------------------下表需要补充
    year yy, yyyy quarter qq, q (季度) month mm, m (m O无效) dayofyear dy, y (O表星期) day dd, d (d O无效) 
    week wk, ww (wk O无效)
    weekday dw (O不清楚)
    Hour hh,hh12,hh24 (hh12,hh24 S无效) minute mi, n (n O无效) second ss, s (s O无效)
    millisecond ms (O无效)
  ----------------------------------------------

    40.当月最后一天
    S:不知道
    O:select LAST_DAY(sysdate) value from dual

    41.本星期的某一天(比如星期日)
    S:不知道
    O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

    42.字符串转时间
    S:可以直接转或者select cast('2004-09-08'as datetime) value
    O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

    43.求两日期某一部分的差(比如秒)
    S:select datediff(ss,getdate(),getdate()+12.3) value
    O:直接用两个日期相减(比如d1-d2=12.3)
         SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

    44.根据差值求新的日期(比如分钟)
    S:select dateadd(mi,8,getdate()) value
    O:SELECT sysdate+8/60/24 vaule FROM DUAL;

    45.求不同时区时间
    S:不知道
    O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

  -----时区参数,Peking在东8区应该是Ydt------- 
      AST ADT大西洋标准时间
      BST BDT白令海标准时间
      CST CDT中部标准时间
      EST EDT东部标准时间
     GMTge林尼治标准时间
     HST HDT阿拉斯加—夏威夷标准时间
     MST MDT山区标准时间
     NST纽芬兰标准时间
     PST PDT太平洋标准时间
    YST YDT YUKON标准时间

    Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:

函数 Oracle Microsoft SQL Server
  把字符转换为ASCII   ASCII   ASCII
 字串连接  CONCAT  (expressiοn + expressiοn)
 把ASCII转换为字符  CHR  CHR
 返回字符串中的开始字符(左起)  INSTR  CHARINDEX
 把字符转换为小写  LOWER  LOWER
 把字符转换为大写  UPPER  UPPER
 填充字符串的左边  LPAD  N/A
清除开始的空白  LTRIM  LTRIM
 清除尾部的空白  RTRIM   RTRIM
 字符串中的起始模式(pattern)  INSTR  PATINDEX
 多次重复字符串 RPAD  REPLICATE
 字符串的语音表示  SOUNDEX  SOUNDEX
 重复空ge的字串  RPAD  SPACE
 从数字数据转换为字符数据  TO_CHAR  STR
 子串  SUBSTR  SUBSTRING
 替换字符  REPLACE  STUFF
 将字串中的每个词首字母大写  INITCAP  N/A
 翻译字符串  TRANSLATE  N/A
 字符串长度  LENGTH  DATELENGTH or LEN
 列表中最大的字符串  GREATEST  N/A
 列表中最小的字符串 LEAST  N/A

上一页  [1] [2] [3] 


oracle与sql的区别(常用函数)