SQLServer和Oracle的常用函数对比
1。绝对值
S:selectabs(-1)value
O:selectabs(-1)valuefromdual
2。
取整(大)
S:selectceiling(-1。001)value
O:selectceil(-1。001)valuefromdual
3。取整(小)
S:selectfloor(-1。
001)value
O:selectfloor(-1。001)valuefromdual
4。取整(截取)
S:selectcast(-1。002asint)value
O:selecttrunc(-1。
002)valuefromdual
5。四舍五入
S:selectround(1。23456,4)value1。23460
O:selectround(1。23456,4)valuefromdual1。
2346
6。e为底的幂
S:selectExp(1)value2。7182818284590451
O:selectExp(1)valuefromdual2。71828182
7。
取e为底的对数
S:selectlog(2。7182818284590451)value1
O:selectln(2。7182818284590451)valuefromdual;1
8。
取10为底对数
S:selectlog10(10)value1
O:selectlog(10,10)valuefromdual;1
9。取平方
S:selectSQUARE(4)value16
O:selectpower(4,2)valuefromdual16
10。
取平方根
S:selectSQRT(4)value2
O:selectSQRT(4)valuefromdual2
11。求任意数为底的幂
S:selectpower(3,4)value81
O:selectpower(3,4)valuefromdual81
12。
取随机数
S:selectrand()value
O:selectsys。dbms_random。value(0,1)valuefromdual;
13。取符号
S:selectsign(-8)value-1
O:selectsign(-8)valuefromdual-1
----------数学函数
14。
圆周率
S:SELECTPI()value3。1415926535897931
O:不知道
15。sin,cos,tan参数都以弧度为单位
例如:selectsin(PI()/2)value得到1(SQLServer)
16。
Asin,Acos,Atan,Atan2返回弧度
17。弧度角度互换(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度
---------数值间比较
18。
求集合最大值
S:selectmax(value)valuefrom
(select1value
union
select-2value
union
select4value
union
select3value)a
O:selectgreatest(1,-2,4,3)valuefromdual
19。
求集合最小值
S:selectmin(value)valuefrom
(select1value
union
select-2value
union
select4value
union
select3value)a
O:selectleast(1,-2,4,3)valuefromdual
20。
如何处理null值(F2中的null以10代替)
S:selectF1,IsNull(F2,10)valuefromTbl
O:selectF1,nvl(F2,10)valuefromTbl
--------数值间比较
21。
求字符序号
S:selectascii('a')value
O:selectascii('a')valuefromdual
22。从序号求字符
S:selectchar(97)value
O:selectchr(97)valuefromdual
23。
连接
S:select'11' '22' '33'value
O:selectCONCAT('11','22')||33valuefromdual
23。子串位置--返回3
S:selectCHARINDEX('s','sdsq',2)value
O:selectINSTR('sdsq','s',2)valuefromdual
23。
模糊子串的位置--返回2,参数去掉中间%则返回7
S:selectpatindex('%d%q%','sdsfasdqe')value
O:oracle没发现,但是instr可以通过第四霾问?刂瞥鱿执问?BR>selectINSTR('sdsfasdqe','sd',1,2)valuefromdual返回6
24。
求子串
S:selectsubstring('abcd',2,2)value
O:selectsubstr('abcd',2,2)valuefromdual
25。子串代替返回aijklmnef
S:SELECTSTUFF('abcdef',2,3,'ijklmn')value
O:SELECTReplace('abcdef','bcd','ijklmn')valuefromdual
26。
子串全部替换
S:没发现
O:selectTranslate('fasdbfasegas','fa','我')valuefromdual
27。长度
S:len,datalength
O:length
28。
大小写转换lower,upper
29。单词首字母大写
S:没发现
O:selectINITCAP('abcddsafdf')valuefromdual
30。左补空格(LPAD的第一个参数为空格则同space函数)
S:selectspace(10) 'abcd'value
O:selectLPAD('abcd',14)valuefromdual
31。
右补空格(RPAD的第一个参数为空格则同space函数)
S:select'abcd' space(10)value
O:selectRPAD('abcd',14)valuefromdual
32。
删除空格
S:ltrim,rtrim
O:ltrim,rtrim,trim
33。重复字符串
S:selectREPLICATE('abcd',2)value
O:没发现
34。
发音相似性比较(这两个单词返回值一样,发音相同)
S:SELECTSOUNDEX('Smith'),SOUNDEX('Smythe')
O:SELECTSOUNDEX('Smith'),SOUNDEX('Smythe')fromdual
SQLServer中用SELECTDIFFERENCE('Smithers','Smythers')比较soundex的差
返回0-4,4为同音,1最高
--------------日期函数
35。
系统时间
S:selectgetdate()value
O:selectsysdatevaluefromdual
36。前后几日
直接与整数相加减
37。
求日期
S:selectconvert(char(10),getdate(),20)value
O:selecttrunc(sysdate)valuefromdual
selectto_char(sysdate,'yyyy-mm-dd')valuefromdual
38。
求时间
S:selectconvert(char(8),getdate(),108)value
O:selectto_char(sysdate,'hh24:mm:ss')valuefromdual
39。
取日期时间的其他部分
S:DATEPART和DATENAME函数(第一个参数决定)
O:to_char函数第二个参数决定
参数---------------------------------下表需要补充
yearyy,yyyy
quarterqq,q(季度)
monthmm,m(mO无效)
dayofyeardy,y(O表星期)
daydd,d(dO无效)
weekwk,ww(wkO无效)
weekdaydw(O不清楚)
Hourhh,hh12,hh24(hh12,hh24S无效)
minutemi,n(nO无效)
secondss,s(sO无效)
millisecondms(O无效)
----------------------------------------------
40。
当月最后一天
S:不知道
O:selectLAST_DAY(sysdate)valuefromdual
41。本星期的某一天(比如星期日)
S:不知道
O:SELECTNext_day(sysdate,7)vauleFROMDUAL;
42。
字符串转时间
S:可以直接转或者selectcast('2004-09-08'asdatetime)value
O:SELECTTo_date('2004-01-0522:09:38','yyyy-mm-ddhh24-mi-ss')vauleFROMDUAL;
43。
求两日期某一部分的差(比如秒)
S:selectdatediff(ss,getdate(),getdate() 12。3)value
O:直接用两个日期相减(比如d1-d2=12。3)
SELECT(d1-d2)*24*60*60vauleFROMDUAL;
44。
根据差值求新的日期(比如分钟)
S:selectdateadd(mi,8,getdate())value
O:SELECTsysdate 8/60/24vauleFROMDUAL;
45。
求不同时区时间
S:不知道
O:SELECTNew_time(sysdate,'ydt','gmt')vauleFROMDUAL;
-----时区参数,北京在东8区应该是Ydt-------
ASTADT大西洋标准时间
BSTBDT白令海标准时间
CSTCDT中部标准时间
ESTEDT东部标准时间
GMT格林尼治标准时间
HSTHDT阿拉斯加—夏威夷标准时间
MSTMDT山区标准时间
NST纽芬兰标准时间
PSTPDT太平洋标准时间
YSTYDTYUKON标准时间。
全部