[原创]SQLServer和Oracle的常用函数对比
<P>---------数学函数 <BR> 1.绝对值 <BR> S:select abs(-1) value<BR> O:select abs(-1) value from dual</P><P> 2.取整(大) <BR> S:select ceiling(-1.001) value <BR> O:select ceil(-1.001) value from dual</P>
<P> 3.取整(小) <BR> S:select floor(-1.001) value <BR> O:select floor(-1.001) value from dual</P>
<P> 4.取整(截取)<BR> S:select cast(-1.002 as int) value <BR> O:select trunc(-1.002) value from dual </P>
<P> 5.四舍五入<BR> S:select round(1.23456,4) value 1.23460<BR> O:select round(1.23456,4) value from dual 1.2346</P>
<P> 6.e为底的幂 <BR> S:select Exp(1) value 2.7182818284590451 <BR> O:select Exp(1) value from dual 2.71828182</P>
<P> 7.取e为底的对数<BR> S:select log(2.7182818284590451) value 1<BR> O:select ln(2.7182818284590451) value from dual; 1</P>
<P> 8.取10为底对数<BR> S:select log10(10) value 1<BR> O:select log(10,10) value from dual; 1</P>
<P> 9.取平方<BR> S:select SQUARE(4) value 16<BR> O:select power(4,2) value from dual 16</P>
<P> 10.取平方根<BR> S:select SQRT(4) value 2<BR> O:select SQRT(4) value from dual 2</P>
<P> 11.求任意数为底的幂<BR> S:select power(3,4) value 81<BR> O:select power(3,4) value from dual 81</P>
<P> 12.取随机数<BR> S:select rand() value <BR> O:select sys.dbms_random.value(0,1) value from dual;</P>
<P> 13.取符号<BR> S:select sign(-8) value -1<BR> O:select sign(-8) value from dual -1<BR> ----------数学函数</P>
<P> 14.圆周率<BR> S:SELECT PI() value 3.1415926535897931<BR> O:不知道</P>
<P> 15.sin,cos,tan 参数都以弧度为单位<BR> 例如:select sin(PI()/2) value 得到1(SQLServer)</P>
<P> 16.Asin,Acos,Atan,Atan2 返回弧度</P>
<P> 17.弧度角度互换(SQLServer,Oracle不知道)<BR> DEGREES:弧度-〉角度<BR> RADIANS:角度-〉弧度</P>
<P> ---------数值间比较</P>
<P> 18. 求集合最大值<BR> S:select max(value) value from <BR> (select 1 value<BR> union<BR> select -2 value<BR> union<BR> select 4 value<BR> union<BR> select 3 value)a</P>
<P> O:select greatest(1,-2,4,3) value from dual</P>
<P> 19. 求集合最小值<BR> S:select min(value) value from <BR> (select 1 value<BR> union<BR> select -2 value<BR> union<BR> select 4 value<BR> union<BR> select 3 value)a</P>
<P> O:select least(1,-2,4,3) value from dual</P>
<P> 20.如何处理null值(F2中的null以10代替)<BR> S:select F1,IsNull(F2,10) value from Tbl<BR> O:select F1,nvl(F2,10) value from Tbl</P>
<P> --------数值间比较</P>
<P> 21.求字符序号<BR> S:select ascii('a') value<BR> O:select ascii('a') value from dual</P>
<P> 22.从序号求字符<BR> S:select char(97) value<BR> O:select chr(97) value from dual</P>
<P> 23.连接<BR> S:select '11'+'22'+'33' value<BR> O:select CONCAT('11','22')||33 value from dual</P>
<P> 23.子串位置 --返回3<BR> S:select CHARINDEX('s','sdsq',2) value <BR> O:select INSTR('sdsq','s',2) value from dual</P>
<P> 23.模糊子串的位置 --返回2,参数去掉中间%则返回7<BR> S:select patindex('%d%q%','sdsfasdqe') value <BR> O:oracle没发现,但是instr可以通过第四霾问?刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6</P>
<P> 24.求子串<BR> S:select substring('abcd',2,2) value <BR> O:select substr('abcd',2,2) value from dual</P>
<P> 25.子串代替 返回aijklmnef<BR> S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value<BR> O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual</P>
<P> 26.子串全部替换<BR> S:没发现<BR> O:select Translate('fasdbfasegas','fa','我' ) value from dual</P>
<P> 27.长度<BR> S:len,datalength<BR> O:length</P>
<P> 28.大小写转换 lower,upper</P>
<P> 29.单词首字母大写<BR> S:没发现<BR> O:select INITCAP('abcd dsaf df') value from dual</P>
<P> 30.左补空格(LPAD的第一个参数为空格则同space函数)<BR> S:select space(10)+'abcd' value<BR> O:select LPAD('abcd',14) value from dual</P>
<P> 31.右补空格(RPAD的第一个参数为空格则同space函数)<BR> S:select 'abcd'+space(10) value<BR> O:select RPAD('abcd',14) value from dual</P>
<P> 32.删除空格<BR> S:ltrim,rtrim<BR> O:ltrim,rtrim,trim</P>
<P> 33. 重复字符串<BR> S:select REPLICATE('abcd',2) value <BR> O:没发现</P>
<P> 34.发音相似性比较(这两个单词返回值一样,发音相同)<BR> S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')<BR> O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual<BR> SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差<BR> 返回0-4,4为同音,1最高</P>
<P> --------------日期函数</P>
<P> 35.系统时间<BR> S:select getdate() value<BR> O:select sysdate value from dual</P>
<P> 36.前后几日<BR> 直接与整数相加减</P>
<P> 37.求日期<BR> S:select convert(char(10),getdate(),20) value<BR> O:select trunc(sysdate) value from dual<BR> select to_char(sysdate,'yyyy-mm-dd') value from dual</P>
<P> 38.求时间<BR> S:select convert(char(8),getdate(),108) value<BR> O:select to_char(sysdate,'hh24:mm:ss') value from dual</P>
<P> 39.取日期时间的其他部分<BR> S:DATEPART 和 DATENAME 函数 (第一个参数决定) <BR> O:to_char函数 第二个参数决定</P>
<P> 参数---------------------------------下表需要补充<BR> year yy, yyyy <BR> quarter qq, q (季度)<BR> month mm, m (m O无效)<BR> dayofyear dy, y (O表星期)<BR> day dd, d (d O无效)<BR> week wk, ww (wk O无效)<BR> weekday dw (O不清楚)<BR> Hour hh,hh12,hh24 (hh12,hh24 S无效)<BR> minute mi, n (n O无效)<BR> second ss, s (s O无效)<BR> millisecond ms (O无效)<BR> ----------------------------------------------</P>
<P> 40.当月最后一天<BR> S:不知道<BR> O:select LAST_DAY(sysdate) value from dual</P>
<P> 41.本星期的某一天(比如星期日)<BR> S:不知道<BR> O:SELECT Next_day(sysdate,7) vaule FROM DUAL;</P>
<P> 42.字符串转时间<BR> S:可以直接转或者select cast('2004-09-08'as datetime) value<BR> O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;</P>
<P> 43.求两日期某一部分的差(比如秒)<BR> S:select datediff(ss,getdate(),getdate()+12.3) value<BR> O:直接用两个日期相减(比如d1-d2=12.3)<BR> SELECT (d1-d2)*24*60*60 vaule FROM DUAL;</P>
<P> 44.根据差值求新的日期(比如分钟)<BR> S:select dateadd(mi,8,getdate()) value<BR> O:SELECT sysdate+8/60/24 vaule FROM DUAL;</P>
<P> 45.求不同时区时间<BR> S:不知道<BR> O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;</P>
<P> -----时区参数,北京在东8区应该是Ydt-------<BR> AST ADT 大西洋标准时间<BR> BST BDT 白令海标准时间<BR> CST CDT 中部标准时间<BR> EST EDT 东部标准时间<BR> GMT 格林尼治标准时间<BR> HST HDT 阿拉斯加—夏威夷标准时间<BR> MST MDT 山区标准时间<BR> NST 纽芬兰标准时间<BR> PST PDT 太平洋标准时间<BR> YST YDT YUKON标准时间</P>
<P> <BR></P>
页:
[1]
