sqlserver和oracle常用函数对比

时间:2022-05-15 14:53:52

数学函数

序号

函数功能

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;