时间: 2021-08-13 作者:daque
在把oracle查问变换为sql server的功夫要更加留心少许不简单提防到的题目。咱们领会,t-sql是sql server的谈话引擎,而oracle的谈话引擎却是plsql。这两种查问谈话都对ansi sql-92规范举行了扩充以供给特殊的扶助力度。你所创造的运用步调简直都要用到那些弥补个性。正文就对最常用的、非规范的oracle扩充举行了证明,同声还要引见下怎样对那些扩充举行变化以用在sql server情况下。 列的采用 用plsql实行数据查问的功夫,from子句是必需的,这同sql server的诉求是一律的。 select语句必需采用对准的数据表。在oracle数据库内有一种特出的表dual。dual表由oracle偕同数据字典一齐创造,一切的用户都不妨用称呼dual考察该表。这个内外惟有一列dummy,该列设置为varchar2(1)典型,有一条龙值x。 从dual表采用数据常被用来经过select语句计划常数表白式,因为dual惟有一条龙数据,以是常数只归来一次。 oracle下的dual查问如次所示: select ‘x’ from dual 而平等的sql server查问则是底下这个格式: select ‘x’ 贯穿 oracle用|| 标记动作贯穿符,而sql server的贯穿符是减号:+ 。 oracle查问如次所示: select ‘name’ || ‘last name’ from tablename 对应的sql server查问如次所示: select ‘name’ + ‘last name’ 数字选择 oracle数据库内有一个trunc因变量,该因变量归来m位十进制数的n位;即使简略m则n即是0位。m的值不妨为负,表白截去少量点左边m位数字。 在sql server下不妨用round大概floor。 以次是oracle查问: select trunc(15.79,1) "truncate" from dual; 底下是同类查问的sql server本子: select round(15.79, 0) rounded , round(15.79, 0,1) truncated select floor(round(15.79, 0)), floor(round(15.79, 0,1) ) 数字变换 oracle的to_char因变量不妨把n位number数据典型变换为varchar2 数据典型,同声沿用可选的数字方法。 sql server则经过str因变量归来数字变换之后的字符数据。然而,该因变量不具简单的format参数。 oracle查问如次: select to_char(123.45 ,99999999999999) from tab select to_char(expiry_date,’ddmonyyyy’) from tab 以次是sql server本子的查问: select str(123.45, 14) select str(round(123.455 , 2),12,2) select cast(replace((convert(varchar(12) , expirydate, 106 )),’ ’ , ’’) as varchar(9)) length和len 以次是oracle的查问: select length(’sqlmag’) "length in characters" from dual; 之上查问在sql server下是如许写的: select len(’sqlmag’) "length in characters" 日子 之上两种体例都具备各自的暂时日子和功夫方法。 oracle博得日子和沿用如次办法: sysdate sql server则是如许的: getdate() 你不妨用百般语法操纵日子。以次的代码对oracle日子值中的月份举行了方法安排(归来日子再加上n月): select add_months(sysdate,12) from dual sql server则是如次实行一致功效的: select dateadd(mm,12,getdate()) 数据的减法也各别。以次代码在oracle市直接对数据举行减法操纵: select sysdate -add_months(sysdate,12) from dual sql server则是如许做的: select datediff(dd, getdate(),dateadd(mm,12,getdate()))