• MSSQL和Oracle常用函数比对


    数学函数

    序号

    函数功能

    SQL Server用法

    Oracle用法

    1

    绝对值

    select abs(-1) value

    select abs(-1) value from dual

    2

    取整(大)

    select ceiling(-1.001) value

    select ceil(-1.001) value from dual

    3

    取整(小)

    select floor(-1.001) value

    select floor(-1.001) value from dual

    4

    取整(截取)

    select cast(-1.002 as int) value

    select trunc(-1.002) value from dual

    5

    四舍五入

    select round(1.23456,4) value

    select round(1.23456,4) value from dual

    6

    为底的幂

    select Exp(1) value

    select Exp(1) value from dual

    7

    取e为底的对数

    select log(2.7182818284590451)

    select ln(2.7182818284590451)

    8

    取10为底对数

    select log10(10)

    select log(10,10)

    9

    取平方

    select SQUARE(4)

    select power(4,2)

    10

    取平方根

    select SQRT(4)

    select SQRT(4)

    11

    求任意数为底的幂

    select power(3,4)

    select power(3,4)

    12

    取随机数

    select rand()

    select sys.dbms_random.value(0,1)

    13

    取符号

    select sign(-8)

    select sign(-8)

    14

    圆周率

    SELECT PI()

    15

    sin,cos,tan

    select sin(PI()/2)

    select sin(PI()/2)

    16

    求集合最大值

    select max(value) value from
      (select 1 value
      union
      select -2 value
      union
      select 4 value
      union
      select 3 value)a

    select greatest(1,-2,4,3) value from dual

    17

    求集合最小值

    select min(value) value from
      (select 1 value
      union
      select -2 value
      union
      select 4 value
      union
      select 3 value)a

    select least(1,-2,4,3) value from dual

    18

    处理null值(F2中的null以10代替)

    select F1,IsNull(F2,10) value from Tbl

    select F1,nvl(F2,10) value from Tbl

    数值间比较

    序号

    函数功能

    SQL Server用法

    Oracle用法

    1

    求字符序号

    select ascii('a')

    select ascii('a') value from dual

    2

    从序号求字符

    select char(97) value

    select chr(97) value from dual

    3

    连接

    select '11'+'22'+'33' value

    select CONCAT('11','22')||33 value from dual

    4

    子串位置

    select charindex('s','sdsq',2) value

    select instr('sdsq','s',2) value from dual

    5

    模糊子串的位(返回2,参数去掉中间%则返回7)

    select patindex('%d%q%','sdsfasdqe') value

    select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

    6

    求子串

    select substring('abcd',2,2) value

    select substr('abcd',2,2) value from dual

    7

    子串代替(返回aijklmnef)

    SELECT STUFF('abcdef', 2, 3, 'ijklmn') value

    SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

    8

    子串全部替换

    没发现

    select Translate('fasdbfasegas','fa','我' ) value from dual

    9

    长度

    Len或datalength

    length

    10

    大小写转换

    lower,upper

    lower,upper

    11

    单词首字母大写

    没发现

    select INITCAP('abcd dsaf df') value from dual

    12

    左补空格

    select space(10)+'abcd' value

    select LPAD('abcd',14) value from dual

    13

    右补空格

    select 'abcd'+space(10) value

    select RPAD('abcd',14) value from dual

    14

    删除空格

    ltrim,rtrim

    ltrim,rtrim,trim

    15

    重复字符串

    select REPLICATE('abcd',2) value

    lpad('d',6,'0'),rpad(‘d’,6,’0’)

    16

    发音相似性比较(这两个单词返回值一样,发音相同)

    SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')

    SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual

    日期函数

    序号

    函数功能

    SQL Server用法

    Oracle用法

    1

    系统时间

    select getdate() value

    select sysdate value from dual

    前后几日

    直接与整数相加减

    直接与整数相加减

    求日期

    select convert(char(10),getdate(),20) value

    select trunc(sysdate) value from dual select to_char(sysdate,'yyyy-mm-dd') value from dual

    求时间

    select convert(char(8),getdate(),108) value

    select to_char(sysdate,'hh24:mm:ss') value from dual

    取日期时间的其他部分

    DATEPART 和 DATENAME 函数 (第一个参数决定)

    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无效)

    当月最后一天

    没发现

    select lsat_day(sysdate) value from dual

    本星期的某一天(比如星期日)

    没发现

    select Next_day(sysdate,7) vaule FROM DUAL;

    字符串转时间

    可以直接转或者select cast('2004-09-08'as datetime) value

    select To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

    求两日期某一部分的差(比如秒)

    select datediff(ss,getdate(),getdate()+12.3) value

    直接用两个日期相减(比如d1-d2=12.3)
      SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

    根据差值求新的日期(比如分钟)

    select dateadd(mi,8,getdate()) value

    SELECT sysdate+8/60/24 vaule FROM DUAL;

    --------------------
    做一个精神上的素食主义者。
  • 相关阅读:
    Undo/Redo实现
    [CruiseControl]binary安装和启动
    perl读写文件和命令行解析
    C++跨平台IDE之CodeBlocks
    Swig实现多语言接口
    让人梦萦的西安小吃(转载)
    推荐:Visual Basic.NET Windows Forms 编程
    健康生活16个健康习惯
    推荐一个ASP的内容管理框架(ASP Nuke)
    《企业应用架构模式》读书笔记(1)
  • 原文地址:https://www.cnblogs.com/xfile/p/5207059.html
Copyright © 2020-2023  润新知