SQL Server 与Oracle常用函数

    技术2022-05-20  39

    一、表之间复制数据(两表表结构一致s):

            insert into table_a select * from table_b

     

    二、数学函数:

    1、绝对值: S: select abs(-1) O: select abs(-1) from dual 2、取整(大) S:select ceiling(-1.001) O: select ceil(-1.001) from dual 3、取整(小) S:select floor(-1.001) O:select floor(-1.001) from dual 4、取整(截取) S:select cast(-1.002 as int) O:select trunc(-1.002) from dual 5、四舍五入 S:select round(1.23456,4) O:select round(1.23456,4) from dual -- 第2个参数 4,表示保留的小数位数 6、e为底的幂 S:select Exp(2) O:select Exp(2) from dual -- e的2次幂 7、取e为底的对数 S:select log(7.38905609893065) O:select ln(7.38905609893065) from dual -- 结果:2 8、取10为底对数 S:select log10(100) O:select log(10,100) from dual -- 结果:2 9、取平方 S:select square(4) O: select power(4,2) from dual -- 结果:2 10、取平方根 S:select sqrt(4) O:select sqrt(4) from dual 11、求任意数为底的幂 S:select power(3,4) O:select power(3,4) from dual -- 结果:81 12、取随机数 S:select rand() O:select sys.dbms_random.value(0,1) from dual 13、取符号 S:select sign(-8) O:select sign(-8) from dual -- 结果:-1, (-1表示为负数,1表示为正数,0表示0) 14、圆周率 S:select pi() O:select acos(-1) from dual 15、sin,cos,tan参数都以弧度为单位 16、asin,acos,atan,atan2返回弧度 17、弧度角度互换: S: degrees:弧度->角度 radians:角度->弧度 == 数值间比较 18、求集合最大值 S: select max(value) from (select 1 value union select -2 value union select 4 value union select 3 value) a O:select greatest(1,-2,4,3) from dual 19、求集合最小值 S: select min(value) from (select 1 value union select -2 value union select 4 value union select 3 value) a O:select least(1,-2,4,3) from dual 20、如何处理null值(F2中的null以10代替) S: select f1,IsNull(f2,10) from tb1 O: select f1,nvl(f2,10) from tb1 21、求字符ASCII码 S:select ascii('a') O:select ascii('a') from dual 22、从ascii求字符 S:select char(97) O:select chr(97) from dual 23、字串位置 S:select charindex('s','sdsq',2) O:select instr('sdsq','s',2) from dual --- 第3个参数,是指指定字符出现的次数,当此参数大于出现的最大次数时,返回最后一次出现的位置 24、求子串 S:select substring('abcd',1,2) O:select substr('abcd',1,2) from dual --- 第2个参数是截取的起始值,第3个参数是截取的长度 25、字串代替 S:select stuff('abcdef',2,3,'ijklmn') O:select replace('abcdef','bcd','ijklmn') from dual -- 结果:aijklmnef 26、字串全部替换 S:select replace('wo是woo','wo','我') -- 结果:‘我是我o’,与oracle执行的结果有些不一样 O:select translate('wo是woo','wo','我') from dual -- 结果:‘我是我’,最后一个o,因为是wo的字串,因此被替换掉了 27、长度 S: select len('aaaaaa'); select datalength('aaaaaa') -- 现在返回结果都是6,len、datalength有不同之处,具体细查 O:select length('aaaaaa') from dual 28、大小写转换 S: select upper('aaa'); select lower('AAA') O: select upper('aaa') from dual; select lower('AAA') from dual 29、单词首字母大写 S:没找到具体函数 O: select initcap('abcd dsaf df') from dual -- 结果:Abcd Dsaf Df 30、左补空格 S: select space(20)+'abcd' O: select lpad('abcd',20) from dual 31、右补空格 S: select 'abcd'+space(20) O: select rpad('abcd',20) from dual 32、删除空格 S: select ltrim(' abcd ') ; select rtrim(' abcd ') O: select ltrim(' abcd ') from dual; select rtrim(' abcd ') from dual; select trim(' abcd ') from dual 33、重复字符串 S:select replicate('abcd',2) -- 结果:abcdabcd O:没找到 34、发音相似性比较(这两个单词返回值一样,发音相同) S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') --- SQL SERVER2005中查询返回结果不一样 O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual --- oracle查询返回结果一样 === 日期函数: 35、系统时间 S:select getdate() O:select sysdate from dual 36、前后几日:直接与整数相加减 如: S:select getdate()+1 O:select sysdate+1 from dual 37、求日期 S: select convert(char(10),getdate(),20) O: select trunc(sysdate) from dual; select to_char(sysdate,'yyyy-mm-dd') from dual 38、求时间 S:select convert(char(8),getdate(),108) O:select to_char(sysdate,'hh24:mm:ss') from dual 39、取日期时间的其他部分 S:datepart、datename函数,如: select datepart(yyyy,getdate()); select datepart(q,getdate()) select DATENAME(yyyy,getdate()); select DATENAME(q,getdate()) O:to_char函数,如: select to_char(sysdate,'yyyy') from dual 参数说明: 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无效) 40、当月最后一天 S:select dateadd(dd,-day(dateadd(m,1,getdate())),dateadd(m,1,getdate())) O:select last_day(sysdate) from dual 41、本星期的某一天(比如星期天) S:select dateadd(wk, datediff(wk,0,getdate()), 6) AS 本周的星期天 O:select next_day(sysdate,1) from dual; -- 西方,周日是第1个工作日,所以参数是1,next_day函数查询是查询当周指定的工作日,如果该工作日已过去,这表示下周指定的工作日。 42、字符串转时间 S:select cast('2011-02-24' as datetime) O:select to_date('2011-02-24 17:29:02','yyyy-mm-dd hh24-mi-ss') from dual; 43、求两日期某一部分的差(比如秒) S:select datediff(ss,getdate(),getdate()+12.3) O:SELECT (sysdate-to_date('2011-02-24 17:29:02','yyyy-mm-dd hh24-mi-ss'))*24*60*60 FROM DUAL; 44、根据差值求新的日期(比如分钟) S:select dateadd(mi,8,getdate()) O:select sysdate+8/60/24 from dual 45、求不同时区时间 S:没找到 O:select New_time(sysdate,'ydt','gmt' ) from dual; -----时区参数,北京在东8区应该是Ydt-------    AST ADT 大西洋标准时间    BST BDT 白令海标准时间    CST CDT 中部标准时间    EST EDT 东部标准时间    GMT 格林尼治标准时间    HST HDT 阿拉斯加?夏威夷标准时间    MST MDT 山区标准时间    NST 纽芬兰标准时间    PST PDT 太平洋标准时间    YST YDT YUKON标准时间

     

     

    以上内容转自:http://flyinglife.javaeye.com/blog/539892 ,作了少量补充

     


    最新回复(0)