天天看點

SQL SERVER 與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;