sql server和oracle 的函数区别
ORACLE与SQL区别与联系
Oracle与sql区别一,字串连接Oracle使用两个竖线符号(||)来作为字串连接操作符,而SQL Server则使用加号(+)。
二,模式匹配SQL Server的LIKE关键字提供了有用的通配符搜索功能,这个功能在Oracle中不支持除了所有的RDBMS都支持的(%)和(_)通配符以外,SQL Server还支持([])和([^])通配符。
([])字符用来查询在一个范围内的所有单个字符。
例如,如果你需要查询包含一个从a到f的字符的数据,三,性能SQL多用户时性能不佳,Oracle在所有的数据库中性能最高,在多用户性能也很强大,执行查询速度也非常快,四,游标的区别Oracle在使用SELECT语句时总是需要游标,不管从数据库中请求多少行。
在Microsoft SQL Server,SELECT语句并不把在返回客户的行上附加游标作为缺省的结果集合。
这是一种返回数据给客户应用程序的有效的方法。
SQL Server为游标函数提供了两种接口。
当在Transact-SQL批处理或者存储过程中使用游标的时候,SQL语句可用来声明、打开、和从游标中抽取,就像定位更新和删除一样。
当使用来自DB-Library、ODBC、或者OLEDB程序的游标时,SQL Server,显式的调用内建的服务器函数来更有效的处理游标。
当从Oracle输入一个PL/SQL过程时,首先判断是否需要在Transact-SQL中采用游标来实现同样的功能。
如果游标仅仅返回,组行给客户程序,就使用非游标的SELECT语句来返回缺省的结果集合。
如果游标用来从行中一次取得一个数据给本地过程变量,你就必须在Transact-SQL中使用游标。
五,语句块Oracle PL/SQL和Microsoft SQL Server Transact-SQL都支持用BEGIN…END术语来标记语句块。
Transact-SQL不需要在DECLARE语句后使用一个语句块。
浅析oracle与sqlserver的区别
Select语句的不同oracle Select * from tablename where rownum < 2sqlserver Select top 1 * from tablenameoracle Select A.*, B.* from A, B where A.bh=B.bh(+)sqlserver Select A.*, B.* from A left Join B on A.bh=B.bhoracle Select A.*, B.* from A, B where A.bh(+)=B.bhsqlserver Select A.*, B.* from A right join B where A.bh=B.bh //oracle 9i 以后也支持了oracle Select * from tablename where lrsj>= to_date(‘2002-11-11’,’yyyy-mm-dd’)sqlserver Select * from tablename where lrsj >= ‘2002-11-11’oracle Select sysdate from dualsqlserver Select getdate()oracle Select Field1 || Field2 from A (指字符串的)sqlserver Select Field1+Field2 from AInsert语句的不同Oracle如何实现自增列(1)建立测试数据表。
CREATE TABLE TEST(ID NUMBER,NAME V ARCHAR2(20),PRIMARY KEY(ID));(2) 创建序列。
CREATE SEQUENCE SEQ_TEST;Parameter的区别存储过程的不同(3)创建触发器。
CREATE OR REPLACE TRIGGER AUTOINCREMENT BEFORE INSERT ON TESTFOR EACH ROWWHEN (NEW.ID IS NULL)BEGINSELECT SEQ_TEST.NEXTV AL INTO :NEW.ID FROM DUAL; END;(4)插入数据。
SQLServer与oracle区别总结
SQLServer与oracle区别总结●开发语法A.SQL 语法两者的SQL语法基本上是相同的,只是一些细节方面的问题一:表的管理:修改表的结构,如增加,删除列,創建表修改表1.修改表的列的數據類型,大小的定義不同,如下面修改數據類型。
Ms sql是ALTER TABLE table_name ALTER COLUMN col DECIMAL (5, 2)Oracle是 Alter TABLE table_name modify(col decimal(5,2))2.增加和刪除表的列,兩者是相同的Alter tabe table_name add(col definition)Alter tabe table_name drop column col_name3 .Oracle如果不要用某列,然後又不想刪除,就可以将某个列标记为未用Alter tabe table_name set unused(tel_no).创建临时表Oracle 的語法是:Create global temporary table aa(col number) on commit preserve rows;临时表只在用户会话时存在的表,或其数据在用户事务处理期间可持续存在的表,创建临时表时可以指定该表是否应当在用户会话期间持续存在(使用on commit preserve rows)On commit delete rows 表示事务处理完成后删除它的行Ms sql的語法是:Select * into #temptable from existedtable二查询方面:1.查表的前N行记录oracle 是用rownum 如select * from table_name where rownum<nMs sql 是用top 如select top n * from table_name2.查詢表的結構Orace 可以通過desc来查看表的结构语法是:desc table_name或者使用数据字典表user_tab_coumns也可以查看到Select column_name,data_type from user_tab_coumnsWhere table_name=''Ms sql可以通過一些系統的存儲過程來看表的結構語法是:exec sp_help table_name3.将一个表的数据添加到另外一个表中a.新表存在前提下:兩者語法是一樣的,如insert into newtable(col1)select col1 from old_tableb.新表不存在前提下,可以用oracle 可以用Create tabe new _table_name as select * from old_tablems sql 可以用 Select * into new_table from old_table三操作符1.連接操作符Oracle是‘||’; Ms sql是‘+’2. Oracle的比较操作符中不等于除了'<>'之外,还有一个 '!='3. 算术操作符,都是+-*/;逻辑操作符都是and,not,or(相同點)4. oracle集合操作符除了union,union all之外还加入intersect,minusIntersect是仅返回两个查询都有行,minus返回第一个查询有第二个查询没有的行四函數1.轉換函數Oracle 中有to_char(),to_date(),to_number()Ms sql 中有cast,convert</n2.系统日期:Oracle: sysdateMs sql: getdate()如Select sysdate from dual 一定要from子句Select getdate() 不一定要from子句3.Decode函数相当if else,或者ms 中的case语句语法是decode(value,if1,then1,if2,then2....)如decode(col1,'1','true','0','fase')4.常规函数Nvl 语法是NVL(EXP1,EXP2) 表示如果ex1为空则返回ex2Nvl2 语法是nvl(exp1,exp2,exp3)表示如果ex1为空,则返回ex3,否则返回ex2Nullif 语法是nullif(ex1,ex2) 如果这两个表达式相等则返回空coalesce语法是coalesce(ex1,ex2,....exn)返回第一个非空表达式5.分組函數Oracle 中的分組函數Rollup,cubeRollup返回的结果集包含分组行和小计行,cube产生交叉报表如:Select a,b,sum(c) from tabname group by rollup(a,b)Select a,b,sum(c) from tabname group by cube(a,b)Ms sql中的分組函數 compute 和 compute byCompute子句为行聚集函数生成汇总值,该汇总值做为一个附加的行显示在结果集中。
Oracle和SQLServer的主要区别
序号 Oracle 1.Oracle的参数文件init.ora是可调的,既我们可以根据数据库的规 模调整Oracle对系统资源的使用情况,以达到最合理的资源分配,让 Oracle达到最佳的性能。因此Oracle的性能优势体现在它的多用户 上,比较适用于访问量和并发用户数大的大型应用系统上。 2.游标是以提高速度全部统一的单项游标,可以允许多用户异步读 取,而且声明比较简单,就一句declare cursor游标名 is select 语句就可以了。 数据库性能 3.Oracle以块为最小存储单位,以区为单位分配空间,用户可以根据 需要自己定义块的大小,且区可以按等额或递增进行分配,这可以大 大减少系统的I/O操作提高数据库的性能。 4.ORACLE中用户可以根据数据需要在创建块时定义填充因子(空闲空 间的百分比)和复用因子(当块的存储数据所占的空间下降到这个百分 比之下时,块才重新标记为可用)。用户可以根据记录变化频率和数 据量的大小设置合适的填充因子和空闲因子。 Oracle的安全可靠性更高: 1.Oracle的数据字典和真实数据是分开存放的,不同的数据分别放在 不同的表空间,而且基表(存储系统参数信息)是加密存储,任何人都 无法访问,只能通过用户可视视图查看。安全性高。 2.在ORACLE里默认只有三个系统用户,ORACLE只能通过注册用户登入 安全性 。 3.Oracle的控制文件记录了数据库文件的物理位置和有效性,在每次 打开Oracle系统都将自动对数据进行验证,查看其有效性,防止数据 的丢失,这体现了Oracle对数据管理的严密性。 4.ORACLE在创建表时用户可以精确定义数据存放的表空间,甚至可以 把一张表分开存放在多个表空间中,这样可以将数据量庞大的表按某 Oralce可以很好地支持Windows、Linux等多种操作系统,跨平台性比 跨平台 较好 Oracle的存储结构是由块、区、段组成,可扩展性好,空间利用率 高,但是操作比较复杂: 1.ORACLE里有两个块参数PCTFREE(填充因子)和PCTUSED(复用因子), 块的大小可设置,这样可降低数据行连接与行迁移的可能性。 2.连续的块组成区,区的分配可以是等额的也可以是自增长的,这样 存储结构的不同 可以减少空间分配次数。 3.Oracle的表可以分为多个段,段由多个区组成,每个段可指定分配 在哪个表空间里,这样大大降低了磁盘争用的可能性。 4.Oracle的数据字典和真实数据是分开存放的,不同的数据分别放在 不同的表空间,而且基表(存储系统参数信息)是加密存储,任何人都 无法访问。只能通过用户可视视图查看。 1.ORACLE中容错类型有三种,分别是预定义错误、非预定义错误、用 户自定义,其中在自定义错误中SQLCODE 错误号、SQLERRM错误描述 是SQL Server没有的。 容错机制 2.Oracle提供了健全的错误机制,用户可以轻松的获得错误位置和错 误原因而加以修改。用户还可以自己定义所须的错误类型,用以检查 逻辑错误。 备份机制 ORACLE提供了7种备份机制,具有联机备份功能 Oracle的日志默认有3个,先写入1号日志,满了后再写入2号日志,2 号满了再写入3号日志,3号满了后Oracle将自动备分1号日志的内 容,然后清空后写入新的日志信息,且Oracle的日志有多路复用功 能,我们可以为日志创建多个镜像,把相同的日志信息同时写入多个 日志文件中,这样可以防止磁盘损坏造成的数据丢失。
Oracle与SQLServer的SQL语法差异总结
项目
Oracle 10g
SQLServer 2008
备注
存储过程格式
CREATEORREPLACEPROCEDURE存储过程名(参数列表) IS
Begin
---存储过程内容
End存储过程名;
CREATEPROCEDURE存储过程名(参数列表) AS
--存储过程内容
From person
2、流控制语句
流控制与表达式结构很相似,只是结果表达式换成语句块
Case表达式when匹配表达式then {语句块1} else {语句块2} end case;
Eg:
case v_name
when‘张三’then
v_number := 1;
when‘李四’then
v_number:=2;
Eg:
Set @result =‘abcd’
2、通过SQL语句赋值
Select变量=表达式from表
Eg:
Select @code=code,@name=name from sysc01 where id = 1000
语句结束符
SQL语句使用分号;作为语句的结束
SQL语句不需要加分号;作为结束符(加也可)
3、动态存储过程(带入、出参)
Eg:
DECLARE@resultVARCHAR(50);
DECLARE@sqlNVARCHAR(1000);
DECLARE@paraNVARCHAR(200);
SET@sql='p_test @code,@name,@result output'
SET@para='@code varchar(10),@name varchar(10),@result varchar(50) output'
OracleMysqlSqlServer函数区别
OracleMysqlSqlServer函数区别OracleMysqlSqlServer函数区别Oracle/Mysql/SqlServer函数区别文章分类:数据库Sql代码1.类型转换--Oracleselect to_number('123') from dual; --123;select to_char(33) from dual; --33;select to_date('2004-11-27','yyyy/mm/dd') from dual;--2004-11-27--Mysqlselect cast('123' as signed integer); --123select cast(33 as char(2)); --33;select to_days('2000-01-01'); --730485--SqlServerselect cast('123' as decimal(30,2)); --123.00select cast(33 as char(2)); --33;select convert(varchar(12) , getdate(), 120)2.四舍五入函数区别--Oracleselect round(12.86*10)/10 from dual; --12.9--Mysqlselect format(12.89,1); --12.9--SqlServerselect round(12.89,1); --12.93.日期时间函数--Oracleselect sysdate from dual; --日期时间--Mysqlselect sysdate(); --日期时间select current_date(); --日期--SqlServerselect getdate(); --日期时间select datediff(day,'2010-01-01',cast(getdate() as varchar(10)));--日期相差天数4.Decode函数--Oracleselect decode(sign(12),1,1,0,0,-1) from dual;--1--Mysql/SqlServerselect case when sign(12)=1 then 1 when sign(12)=0 then 0 else -1 end;--15.判空函数--Oracleselect nvl(1,0) from dual; --1--Mysqlselect ifnull(1,0); --1--SqlServerselect isnull(1,0); --16.字符串连接函数--Oracleselect '1'||'2' from dual; --12select concat('1','2'); --12--Mysqlselect concat('1','2'); --12--SqlServerselect '1'+'2'; --127.记录限制函数--Oracleselect 1 from dual where rownum <= 10;-- Oracle 分页算法一select * from (select page.*,rownum rn from (select * from help) page-- 20 = (currentPage-1) * pageSize + pageSizewhere rownum <= 20)-- 10 = (currentPage-1) * pageSizewhere rn > 10;-- Oralce 分页算法二-- 20 = (currentPage-1) * pageSize + pageSizeselect * from help where rownum<=20minus-- 10 = (currentPage-1) * pageSizeselect * from help where rownum<=10;--Mysqlselect 1 from dual limit 10;select * from dual limit 10,20--SqlServerselect top 10 18.字符串截取函数--Oracleselect substr('12345',1,3) from dual;--Mysql/SqlServerselect substring('12345',1,3);8.把多行转换成一合并列--Oracleselect wm_concat(列名) from dual; --多行记录转换成一列之间用,分割--Mysql/SqlServerselect group_concat(列名);SQLServer和Oracle的常用函数对比1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取整(截取)S:select cast(-1.002 as int) valueO:select trunc(-1.002) value from dual5.四舍五入S:select round(1.23456,4) value 1.23460O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂S:select Exp(1) value 2.7182818284590451O:select Exp(1) value from dual 2.718281827.取e为底的对数S:select log(2.7182818284590451) value 1O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数S:select log10(10) value 1O:select log(10,10) value from dual; 19.取平方S:select SQUARE(4) value 16O:select power(4,2) value from dual 1610.取平方根S:select SQRT(4) value 2O:select SQRT(4) value from dual 211.求任意数为底的幂S:select power(3,4) value 81O:select power(3,4) value from dual 8112.取随机数S:select rand() valueO:select sys.dbms_random.value(0,1) value from dual;13.取符号S:select sign(-8) value -1O:select sign(-8) value from dual -1----------数学函数14.圆周率S:SELECT PI() value 3.1415926535897931O:不知道15.sin,cos,tan 参数都以弧度为单位例如:select sin(PI()/2) value 得到1(SQLServer)16.Asin,Acos,Atan,Atan2 返回弧度17.弧度角度互换(SQLServer,Oracle不知道) DEGREES:弧度-〉角度RADIANS:角度-〉弧度---------数值间比较18. 求集合最大值S:select max(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select greatest(1,-2,4,3) value from dual19. 求集合最小值S:select min(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select least(1,-2,4,3) value from dual20.如何处理null值(F2中的null以10代替)S:select F1,IsNull(F2,10) value from TblO:select F1,nvl(F2,10) value from Tbl--------数值间比较21.求字符序号S:select ascii('a') valueO:select ascii('a') value from dual22.从序号求字符S:select char(97) valueO:select chr(97) value from dual23.连接S:select '11'+'22'+'33' valueO:select CONCAT('11','22')||33 value from dual 23.子串位置--返回3S:select CHARINDEX('s','sdsq',2) valueO:select INSTR('sdsq','s',2) value from dual 23.模糊子串的位置--返回2,参数去掉中间%则返回7 S:select patindex('%d%q%','sdsfasdqe') valueO:oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual 返回624.求子串S:select substring('abcd',2,2) valueO:select substr('abcd',2,2) value from dual25.子串代替返回aijklmnefS:SELECT STUFF('abcdef', 2, 3, 'ijklmn') valueO:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual26.子串全部替换S:没发现O:select Translate('fasdbfasegas','fa','我' ) value from dual27.长度S:len,datalengthO:length28.大小写转换lower,upper29.单词首字母大写S:没发现O:select INITCAP('abcd dsaf df') value from dual30.左补空格(LPAD的第一个参数为空格则同space函数)S:select space(10)+'abcd' valueO:select LPAD('abcd',14) value from dual31.右补空格(RPAD的第一个参数为空格则同space函数)S:select 'abcd'+space(10) valueO:select RPAD('abcd',14) value from dual32.删除空格S:ltrim,rtrimO:ltrim,rtrim,trim33. 重复字符串S:select REPLICATE('abcd',2) valueO:没发现34.发音相似性比较(这两个单词返回值一样,发音相同)S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差返回0-4,4为同音,1最高--------------日期函数35.系统时间S:select getdate() valueO:select sysdate value from dual36.前后几日直接与整数相加减37.求日期S:select convert(char(10),getdate(),20) valueO:select trunc(sysdate) value from dualselect to_char(sysdate,'yyyy-mm-dd') value from dual38.求时间S:select convert(char(8),getdate(),108) valueO:select to_char(sysdate,'hh24:mm:ss') value from dual39.取日期时间的其他部分S:DATEPART 和DATENAME 函数(第一个参数决定)O:to_char函数第二个参数决定参数---------------------------------下表需要补充year yy, yyyyquarter 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:不知道O:select LAST_DAY(sysdate) value from dual41.本星期的某一天(比如星期日)S:不知道O:SELECT Next_day(sysdate,7) vaule FROM DUAL;42.字符串转时间S:可以直接转或者select cast('2004-09-08'as datetime) value O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;43.求两日期某一部分的差(比如秒)S:select datediff(ss,getdate(),getdate()+12.3) valueO:直接用两个日期相减(比如d1-d2=12.3)SELECT (d1-d2)*24*60*60 vaule FROM DUAL;44.根据差值求新的日期(比如分钟)S:select dateadd(mi,8,getdate()) valueO:SELECT sysdate+8/60/24 vaule FROM DUAL;45.求不同时区时间S:不知道O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;-----时区参数,北京在东8区应该是Ydt-------AST ADT 大西洋标准时间BST BDT 白令海标准时间CST CDT 中部标准时间EST EDT 东部标准时间GMT 格林尼治标准时间HST HDT 阿拉斯加—夏威夷标准时间MST MDT 山区标准时间NST 纽芬兰标准时间PST PDT太平洋标准时间YST YDT YUKON标准时间。
浅谈ORACLE与SQL SERVER的差异
摘要ORACLE 和 SQL SERVER 是众多数据库的一分子。
在不同的关系型数据库管理系统(RDBMS)之间,存在很多差异,ORACLE和SQL SERVER都符合SQL-92标准的属性扩展。
从应用程序的开发人员的角度来看,ORACLE和SQL SERVER对数据进行管理方式没有太大的区别。
ORACLE和SQL SERVER之间的内部差异却是十分明显。
计算机系统和终端设备的功能、性能和使用方式千差成别,用户希望在现有设备的基础上,充分利用不同系统的各种资源,尽可能简单地完成一项工作,满足用户的要求,设计一个统一的系统接口,并通过这一接口与局部系统转换,实现各种资源的共享。
这种转换实际上是数据库语言转换,为了实现其转换,就必须进行数据库语言的比较。
ORACLE公司的ORACLE和Microsoft公司推出的SQL ERVER是当今流行的大型关系数据库管理系统,它们是建立在成熟而强大的关系模型基础上,可以很好的支持客户/服务器模型,系统具有功能强大,使用灵活和形式多样的特点,可以用于构造从小型的单用户系统到支持数千个并发用户的大型应用项目上。
本文针对ORACLE和SQL SERVER两种语言进行比较。
关键字:数据库,ORACLE,SQL SERVERAbstractOracle and Sql server are member of numerous database.In the relational database management system (RDBMS) between different, there are number of differences,Properties of Oracle and Sql server are in line with the SQL-92 standard extension.From the application developer's perspective, Oracle and Sql server is not much difference to carry on the management mode of data.Is very obvious to The internal differences between Oracle and Sql server Computer systems and terminal equipment function, performance and the use way thousands of poor into other,Users hope that on the basis of the existing equipment, make full use of various resources in different systems, as simple as possible to complete a task, to meet user requirements, design a unified system interface, and through this interface with the local system transformation, realize the sharing of various resources.This conversion is actually the database language conversion, in order to realize the conversion, the comparison must carry out the database language.Oracle and Microsoft's Sql server is a large scale relational database management system of popular.They are based on a mature and powerful relationship model based on server model, can be very good support customer / the system have the function strong, the use of flexible and diverse forms of characteristics, can be used for the large type application project is constructed from the single user system for small to support thousands of concurrent users.According to Oracle and Sql server the two language are compared.Key words:Database, Oracle,Sql server目录1 绪论 (4)1.1课题研究的背景 (4)2 ORACLE 与 SQL SERVER 的发展史 (6)2.1 ORACLE 与 SQL SERVER 的发展史 (6)2.1.1 ORACLE 的发展 (6)2.1.2 SQL SERVER 的发展 (9)3 ORACLE 与 SQL SERVER性能的比较 (12)3.1数据库操作平台的开放性 (12)3.2性能、价格比 (13)3.3工具软件 (13)3.4文件体系结构 (14)3.4.1 主要的文件体系结构 (14)3.4.2 ORACLE的文件体系结构 (15)3.5存储结构 (15)3.5.1 ORACLE基本表空间 (15)3.5.2 SQL SERVER基本数据库 (15)3.6 基于数据库安全的比较分析 (16)4 ORACLE 与 SQL SERVER 语言的比较 (17)4.1 数据类型的不同 (17)4.1.1 ORACLE 的数据类型 (17)4.1.2 SQL SERVER 的数据类型 (20)4.2 在ORACLE中没有默认约束的说法 (23)4.3 连接变量和字符串的方式不一样 (23)4.4 条件语句if......else......的语法不同 (23)4.5 case语句的语法不同 (24)4.6 触发器创建语法不同 (25)4.7 创建用户的方式不同 (27)4.8 存储过程不同 (29)5 ORACLE 与 SQL SERVER 事务处理的异同 (30)5.1 事务的特点 (30)5.2 事务的执行过程 (30)5.3 事务处理过程的锁定和并发性 (31)5.4 事务日志和自动恢复 (33)结论 (34)致谢 (35)参考文献 (36)1 绪论1.1课题研究的背景数据库系统(Data Base System,简称DBS)通常由软件、数据库和数据管理员组成。
ORACLE与SQLSERVE比较
SQLSERVE \ORACLE\DB2比较【开放性】SQL Server只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。
Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。
而且windows平台的可靠性,安全性和伸缩性是非常有限的。
它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.Oracle能在所有主流平台上运行(包括windows)。
完全支持所有的工业标准。
采用完全开放策略。
可以使客户选择最适合的解决方案。
对开发商全力支持。
DB2能在所有主流平台上运行(包括windows)。
最适于海量数据。
DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.【可伸缩性,并行性】SQL server并行实施和共存模型并不成熟。
很难处理日益增多的用户数和数据卷。
伸缩性有限。
Oracle平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。
如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
DB2DB2具有很好的并行性。
DB2把数据库管理扩充到了并行的、多节点的环境.数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。
数据库分区有时被称为节点或数据库节点【安全性】SQL server没有获得任何安全证书。
Oracle Server获得最高认证级别的ISO标准认证。
DB2获得最高认证级别的ISO标准认证。
【性能】SQL Server多用户时性能不佳Oracle性能最高,保持windowsNT下的TPC-D和TPC-C的世界记录。
DB2适用于数据仓库和在线事物处理,性能较高。
【客户端支持及应用模式】SQL ServerC/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接.Oracle多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接DB2跨平台,多层结构,支持ODBC,JDBC等客户【操作简便】SQL Server操作简单,但只有图形界面.Oracle较复杂, 同时提供GUI和命令行,在windowsNT和unix下操作相同DB2操作简单,同时提供GUI和命令行,在windowsNT和unix下操作相同【使用风险】SQL server完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。
Oracle和SQL_Server的语法区别
SQL 语言支持这一部分概述了 Transact-SQL 和 PL/SQL 语言语法之间的相同点和不同点,并给出转换策略。
要将 Oracle DML 语句和 PL/SQL 程序迁移到 SQL Server 时,请按下列步骤执行:1.验证所有 SELECT、INSERT、UPDATE 和 DELETE 语句的语法是有效的。
进行任何必要的修改。
2.把所有外部联接改为 SQL-92 标准外部联接语法。
3.用相应 SQL Server 函数替代 Oracle 函数。
4.检查所有的比较运算符。
5.用“+”字符串串联运算符代替“||”字符串串联运算符。
6.用 Transact-SQL 程序代替 PL/SQL 程序。
7.把所有 PL/SQL 游标改为非游标 SELECT 语句或 Transact-SQL 游标。
8.用 Transact-SQL 过程代替 PL/SQL 过程、函数和包。
9.把 PL/SQL 触发器转换为 Transact-SQL 触发器。
10.使用 SET SHOWPLAN 语句,优化查询性能。
SELECT 语句Oracle 和 Microsoft SQL Server 使用的 SELECT 语句语法类似。
SQL Server 不支持 Oracle 特定的基于开销的优化程序提示,它必须被删除。
建议使用的技术是,使用 SQL Server 基于开销的优化程序。
有关详细信息,请参见本章后面的“SQL 语句优化”。
SQL Server 不支持 Oracle 的 START WITHUCONNECT BY 子句。
在 SQL Server 中,可以创建完成相同任务的存储过程替代它。
SQL Server 不支持 Oracle 的 INTERSECT 和 MINUS 集合运算符。
可使用 SQL Server EXISTS 和 NOT EXISTS 子句,实现相同的结果。
在下面示例中,使用 INTERSECT 运算符,用于查找学生登记的所有课程的代码和名称。
ORACLE与SQL SERVER的SQL使用区别
Oracle与SQL Server的SQL使用区别整理人:阮淑芳日期:2005-12-15一、数据类型二、自动增长字段以做主键识别2、创建SEQUENCE,将此SEQUENCE与需类ID化的列对应;3、在INSERT语句中对相应列引用其SEQUENCE值:SEQUENCENAME.NEXTVAL三、常用函数3.5其他函数AVGCOUNTMAXMINSUMSTDEVVARISNULL(check_exp,replace_value)CASE AVGCOUNTMAXMINSUMSTDDEVVARIANCENVL(check_exp,replace_value)DECODE1)ISNULL与NVL在MSSQL中ISNULL;在ORACLE中,同样的功能用NVL实现。
2)CASE与DECCODE对某个值进行多个判断分支进行处理.四、常用SQL语法[ELSE{statement|statement_block}] 4>循环语句:WHILEWHILE boolean_condition [{statement|statement_block} ][BREAK][condition]5>RETURN语句用于无条件退出一个批处理、存储过程或触发器;用于存储过程中返回状态值。
LOOP{statement|statement_block};[EXIT[WHEN condition];] END LOOP;B、WHILE循环语句WHILE condition LOOP {statement|statement_block};END LOOP;C、数字式FOR循环语句FOR loop_counter IN[REVERSE]l ow_bound..high_bound LOOP {statement|statement_block};END LOOP;4.3T-SQL中的游标提取循环语句:1)FETCH[NEXT FROM]cursor_na me INTO@variable_1,...@varia ble_n2) WHILE@@FETCH_STATUS=0 BEGINOther_statements FETCH[NEXT FROM]cursor_na me INTO@variable_1,...@varia ble_nEND3)CLOSE cursor_name4.4事务处理语句:1>开始一个事务:BEGIN TRAN[SACTION[transaction_name]]2>提交一个事务:COMMIT TRAN[SACTION[transaction_name]]3>回滚一个事务:ROLLBACK TRAN[SACTION[transaction_name]]4>使用事务保存点:BEGIN TRAN[SACTION[transaction_name]]SAVE TRAN[SACTION]savepoint_nameROLLBACK TRAN[SACTION]savepoint_name在PL/SQL中,事务的开始位置是从前一个事务结束以后执行的第一条SQL语句,或者在连接到该数据库以后所执行的第一条SQL语句。
SQL server和oracle这两个数据库有什么区别?
SQL server和oracle这两个数据库有什么区别?首先这两个都是关系型数据库,都数据经常使用的数据库。
Oracle是排名第一的,从使用广度和并发性性能方面,SQL server排名第三。
它们的区别:1.应用平台的角度:Oracle可以运行在任何平台,像Window,Linux,MarOS 上。
SQL server主流的支持平台是Windows,因为它背后的靠山就是Microsoft.从2017版开始,SQL server也开始跨平台,你可以下载它的Docker版本,就可以运行在Linux和MarOS上。
2.从优化的角度:比如查询优化,Orcale支持*的查询优化,SQL server是没有这个操作的。
从更新的角度,Orcale更新一个字段后需要执行commit提交以后才能更新,而SQL server 不需要commit,它的值已经改变了。
从回滚的角度,Orcale 可以在事务执行中支持回滚,而SQL server不允许,只有事务执行完了,发生失败或发生意外,才执行rollback这个功能。
另外就是Schema的区别,Orcale中一个instance有多个Schema,对于Orcale来说,Schema相当于数据库的概念,对于SQL server来说,一个数据库中可以有多个Schema,所以这个Schema相当于table的概念。
3.从备份的角度说,Orcale支持差分备份,而SQL server不支持,像增量级的,完整的文件级的备份这两个数据库都是支持的。
4.从触发器的角度说,Orcale支持前触发器和后触发器,SQL server只支持后触发器。
最后就是从付费的角度考虑,两者都有开源的版本,可供下载使用。
以上就是两者的区别,希望对你有所帮助。
SQL Server数据库与Oracle数据库的区别
SQL Server数据库与Oracle数据库的区别在数据库领域,SQL Server和Oracle是两个主要的关系型数据库管理系统(RDBMS),它们在很多方面有着明显的区别。
1. 历史背景和公司背景:SQL Server是由Microsoft开发和维护的产品,而Oracle是由Oracle Corporation开发和维护的产品。
这也导致了两者在功能、兼容性和市场份额等方面有所不同。
2. 操作系统支持:SQL Server主要支持Windows操作系统,而Oracle则支持多个操作系统,包括Windows、Linux、UNIX等。
3. 数据库大小和性能:SQL Server适合小型和中型数据库应用,而Oracle适用于大型和复杂的数据库应用。
Oracle在大型数据库的处理能力、并发性和扩展性方面表现较好。
4. 数据处理和查询:SQL Server在数据处理和查询方面有较高的性能和效率,尤其是在大量并发读取和写入的情况下。
Oracle则提供更多的高级查询功能,如复杂的子查询、视图、分区表等。
5. 数据安全和备份:SQL Server和Oracle都提供了各自的数据安全特性,例如权限管理、数据加密等。
然而,Oracle在备份和恢复方面具有更强大和灵活的功能。
6. 成本和授权:SQL Server在许可授权和采购成本方面相对较低,尤其适合中小型企业。
而Oracle则在授权和采购成本方面较高,适用于大型企业和对安全性和性能要求较高的项目。
需要注意的是,这只是SQL Server和Oracle的一些主要区别,实际应用中还需要根据具体需求、项目规模和预算来选择适合的数据库系统。
无论选择哪个数据库系统,都需要根据实际需要进行综合评估,并考虑到数据库性能、可扩展性、安全性、可维护性和成本等因素。
oracle与sqlserver日期函数对比
日期函数下面是Oracle支持的日期函数和它们的Microsoft SQL Server等价函数。
函数Oracle --------------------Microsoft SQL Server日期相加(date column +/- value) or ADD_MONTHS --------------------DATEADD两个日期的差(date column +/- value) or MONTHS_BETWEEN --------------------DATEDIFF 当前日期和时间SYSDATE --------------------GETDATE()一个月的最后一天LAST_DAY --------------------N/A时区转换NEW_TIME --------------------N/A日期后的第一个周日NEXT_DAY --------------------N/A代表日期的字符串TO_CHAR --------------------DATENAME代表日期的整数TO_NUMBER (TO_CHAR)) --------------------DATEPART日期舍入ROUND --------------------CONVERT日期截断TRUNC --------------------CONVERT字符串转换为日期TO_DATE --------------------CONVERT如果为NULL则转换日期NVL -------------------- ISNULL一、sql server日期时间函数Sql Server中的日期与时间函数1. 当前系统日期、时间select getdate()2. dateadd 在向指定日期加上一段时间的基础上,返回新的datetime 值例如:向日期加上2天select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.0003. datediff 返回跨两个指定日期的日期和时间边界数。
Oracle和SQL Server的一些区别(函数和存储过程)
Oracle和SQL Server的一些区别(函数和存储过程)函数SQLServer和Oracle的常用函数对比1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取整(截取)S:select cast(-1.002 as int) valueO:select trunc(-1.002) value from dual5.四舍五入S:select round(1.23456,4) value 1.23460O:select round(1.23456,4) value from dual 1.23466.e为底的幂S:select Exp(1) value 2.7182818284590451O:select Exp(1) value from dual 2.718281827.取e为底的对数S:select log(2.7182818284590451) value 1O:select ln(2.7182818284590451) value from dual; 18.取10为底对数S:select log10(10) value 1O:select log(10,10) value from dual; 19.取平方S:select SQUARE(4) value 16O:select power(4,2) value from dual 1610.取平方根S:select SQRT(4) value 2O:select SQRT(4) value from dual 211.求任意数为底的幂S:select power(3,4) value 81O:select power(3,4) value from dual 8112.取随机数S:select rand() valueO:select sys.dbms_random.value(0,1) value from dual;13.取符号S:select sign(-8) value -1O:select sign(-8) value from dual -1----------数学函数14.圆周率S:SELECT PI() value 3.1415926535897931O:不知道15.sin,cos,tan 参数都以弧度为单位例如:select sin(PI()/2) value 得到1(SQLServer)16.Asin,Acos,Atan,Atan2 返回弧度17.弧度角度互换(SQLServer,Oracle不知道) DEGREES:弧度-〉角度RADIANS:角度-〉弧度---------数值间比较18. 求集合最大值S:select max(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select greatest(1,-2,4,3) value from dual19. 求集合最小值S:select min(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select least(1,-2,4,3) value from dual20.如何处理null值(F2中的null以10代替) S:select F1,IsNull(F2,10) value from Tbl O:select F1,nvl(F2,10) value from Tbl--------数值间比较21.求字符序号S:select ascii('a') valueO:select ascii('a') value from dual22.从序号求字符S:select char(97) valueO:select chr(97) value from dual23.连接S:select '11'+'22'+'33' valueO:select CONCAT('11','22') ¦ ¦33 value from dual23.子串位置 --返回3S:select CHARINDEX('s','sdsq',2) valueO:select INSTR('sdsq','s',2) value from dual23.模糊子串的位置 --返回2,参数去掉中间%则返回7S:select patindex('%d%q%','sdsfasdqe') valueO:oracle没发现,但是instr可以通过第四霾问 刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual 返回624.求子串S:select substring('abcd',2,2) valueO:select substr('abcd',2,2) value from dual25.子串代替返回aijklmnefS:SELECT STUFF('abcdef', 2, 3, 'ijklmn') valueO:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual26.子串全部替换S:没发现O:select Translate('fasdbfasegas','fa','我' ) value from dual27.长度S:len,datalengthO:length28.大小写转换 lower,upper29.单词首字母大写S:没发现O:select INITCAP('abcd dsaf df') value from dual30.左补空格(LPAD的第一个参数为空格则同space函数)S:select space(10)+'abcd' valueO:select LPAD('abcd',14) value from dual31.右补空格(RPAD的第一个参数为空格则同space函数)S:select 'abcd'+space(10) valueO:select RPAD('abcd',14) value from dual32.删除空格S:ltrim,rtrimO:ltrim,rtrim,trim33. 重复字符串S:select REPLICATE('abcd',2) valueO:没发现34.发音相似性比较(这两个单词返回值一样,发音相同)S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dualSQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差返回0-4,4为同音,1最高--------------日期函数35.系统时间S:select getdate() valueO:select sysdate value from dual36.前后几日直接与整数相加减37.求日期S:select convert(char(10),getdate(),20) valueO:select trunc(sysdate) value from dualselect to_char(sysdate,'yyyy-mm-dd') value from dual38.求时间S:select convert(char(8),getdate(),108) valueO:select to_char(sysdate,'hh24:mm:ss') value from dual39.取日期时间的其他部分S:DATEPART 和 DATENAME 函数(第一个参数决定)O:to_char函数第二个参数决定参数---------------------------------下表需要补充year yy, yyyyquarter 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:不知道O:select LAST_DAY(sysdate) value from dual41.本星期的某一天(比如星期日)S:不知道O:SELECT Next_day(sysdate,7) vaule FROM DUAL;42.字符串转时间S:可以直接转或者select cast('2004-09-08'as datetime) valueO:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;43.求两日期某一部分的差(比如秒)S:select datediff(ss,getdate(),getdate()+12.3) valueO:直接用两个日期相减(比如d1-d2=12.3)SELECT (d1-d2)*24*60*60 vaule FROM DUAL;44.根据差值求新的日期(比如分钟)S:select dateadd(mi,8,getdate()) valueO:SELECT sysdate+8/60/24 vaule FROM DUAL;45.求不同时区时间S:不知道O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;-----时区参数,北京在东8区应该是Ydt-------AST ADT 大西洋标准时间BST BDT 白令海标准时间CST CDT 中部标准时间EST EDT 东部标准时间GMT 格林尼治标准时间HST HDT 阿拉斯加—夏威夷标准时间MST MDT 山区标准时间NST 纽芬兰标准时间PST PDT 太平洋标准时间YST YDT YUKON标准时间Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:函数 Oracle Microsoft SQL Server把字符转换为ASCII ASCII ASCII字串连接 CONCAT (expression + expression)把ASCII转换为字符 CHR CHAR返回字符串中的开始字符(左起) INSTR CHARINDEX 把字符转换为小写 LOWER LOWER把字符转换为大写 UPPER UPPER填充字符串的左边 LPAD N/A清除开始的空白 LTRIM LTRIM清除尾部的空白 RTRIM RTRIM字符串中的起始模式(pattern) INSTR PATINDEX 多次重复字符串 RPAD REPLICATE字符串的语音表示 SOUNDEX SOUNDEX重复空格的字串 RPAD SPACE从数字数据转换为字符数据 TO_CHAR STR子串 SUBSTR SUBSTRING替换字符 REPLACE STUFF将字串中的每个词首字母大写 INITCAP N/A翻译字符串 TRANSLATE N/A字符串长度 LENGTH DATELENGTH or LEN列表中最大的字符串 GREATEST N/A列表中最小的字符串 LEAST N/A如果为NULL则转换字串 NVL ISNULL日期函数函数 Oracle Microsoft SQL Server日期相加 (date column +/- value) or ADD_MONTHS DATEADD两个日期的差 (date column +/- value) or MONTHS_BETWEEN DATEDIFF当前日期和时间 SYSDATE GETDATE()一个月的最后一天 LAST_DAY N/A时区转换 NEW_TIME N/A日期后的第一个周日 NEXT_DAY N/A代表日期的字符串 TO_CHAR DATENAME代表日期的整数 TO_NUMBER(TO_CHAR)) DATEPART日期舍入 ROUND CONVERT日期截断 TRUNC CONVERT字符串转换为日期 TO_DATE CONVERT如果为NULL则转换日期 NVL ISNULL转换函数函数 Oracle Microsoft SQL Server数字转换为字符 TO_CHAR CONVERT字符转换为数字 TO_NUMBER CONVERT日期转换为字符 TO_CHAR CONVERT字符转换为日期 TO_DATE CONVERT16进制转换为2进制 HEX_TO_RAW CONVERT 2进制转换为16进制 RAW_TO_HEX CONVERT其它行级别的函数函数 Oracle Microsoft SQL Server返回第一个非空表达式 DECODE COALESCE 当前序列值 CURRVAL N/A下一个序列值 NEXTVAL N/A如果exp1 = exp2, 返回null DECODE NULLIF 用户登录账号ID数字 UID SUSER_ID用户登录名 USER SUSER_NAME用户数据库ID数字 UID USER_ID用户数据库名 USER USER_NAME当前用户 CURRENT_USER CURRENT_USER用户环境(audit trail) USERENV N/A在CONNECT BY子句中的级别 LEVEL N/A合计函数函数 Oracle Microsoft SQL Server Average AVG AVGCount COUNT COUNTMaximum MAX MAXMinimum MIN MINStandard deviation STDDEV STDEV or STDEVP Summation SUM SUMVariance VARIANCE VAR or VARPOracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:EXTRACT(YEAR FROM 日期)存储过程一.多表连接查询,更新存储过程Sql存储过程ALTER PROCEDURE [dbo].[ GetEvent]@SCSWId nvarchar(20)= null ,@ToDate DATETIME,@FromDate DATETIMEASSELECT NOTES.NOTE_ID,NOTES.NOTE,SCSW_CALENDAR.DATE_TIMEFROM SCSW_CALENDARLEFT OUTER JOIN NOTES ON SCSW_CALENDAR.NOTE_ID=notes.note_idWHERE SCSW_CALENDAR.SCSW_ID = SCSWIdORDER BY Patient.PatientIdOracel存储过程1.查询数据的存储过程PROCEDURE GetEvent(SCSWId IN VARCHAR2, FromDate IN DATE, ToDate IN DATE, refOut OUT refcursor)ISBEGINOPEN refOut FORselect NOTES.NOTE_ID,NOTES.NOTE,SCSW_CALENDAR.DATE_TIMEfrom SCSW_CALENDARleft join NOTES on SCSW_CALENDAR.NOTE_ID=notes.note_idwhere SCSW_CALENDAR.SCSW_ID = SCSWIdAND SCSW_CALENDAR.DATE_TIME >= FromDateAND SCSW_CALENDAR.DATE_TIME < ToDateorder by SCSW_CALENDAR.DATE_TIME;END GetEvent;2.更新数据的存储过程:procedure UpdateArticlesubmodel(ArticleSubID number,ArticleTitle nvarchar2,ArticleKeyWord nvarchar2, ArticleContent CLOB,CreatePerson nvarchar2,ChangeDate date,SetTop number,ArticleSubStyleID number,Checked number)asbeginupdate "ArticleSubModel"set "ArticleTitle"=ArticleTitle, "ArticleKeyWord"=ArticleKeyWord, "ArticleContent"=ArticleContent, "CreatePerson"=CreatePerson, "CreateDate"=ChangeDate,"SetTop"=SetTop, "ArticleSubStyleID"=ArticleSubStyleID, "Checked"=Checkedwhere "ArticleSubID"=ArticleSubID; commit;Exception when others thenrollback;end UpdateArticlesubmodel;3.删除数据的存储过程procedure DeleteArticlesubmodel(ArticleSubID number)asbegindelete from "ArticleSubAccessories"where "ArticleSubID"=ArticleSubID;delete from "ArticleSubModel"where "ArticleSubID"=ArticleSubID;commit;Exception when others thenrollback;end DeleteArticlesubmodel;编后:如果您认为有侵权的地方,请来信说明,本人将立即删去。
深度对比Oracle与SQL_Server
Oracle与SQL Server对比这两种数据库之间架构上的比较操作系统的支持Microsoft SQL Server只支持Windows平台,要让Microsoft发布一个支持其它操作系统版本的可能性当然是小之又小的了。
当前来说 SQL Server可以在XP、Vista、Windows Server 2000、2003、2008上运行,同时也有针对于32位和64位版本Windows的数据库版本。
对Oracle来说,它支持多种不同的操作系统平台,包括Windows,另外还有支持Linux和不同分支的Unix.实例、数据库和表空间SQL Server和Oracle之间第一个架构级别的差异就在于对实例 (instance)和数据库(database)概念的定义了。
SQL Server中,实例一词用来代表一个包含了操作系统文件、内存结构、后台进程以及注册表信息的独立的应用服务。
在Windows系统中用一个存在着停止和运行状态的服务来代表一个实例,当处于运行状态时,实例要占用一定的服务器内存以及生成一定数量的后台进程。
SQL Server实例的中心是数据库。
一个SQL Server数据库指的是一个资料库以及操作数据所需要的程序代码,当实例没有运行时,实例中的数据库就不能够访问。
SQL Server有两种数据库:系统数据库(system databases)和用户数据库(user databases)。
在一个SQL Server实例安装完成之后,将会自动创建4个系统数据库:master, model, msdb, tempdb。
如果一个机器上面安装了多个SQL Server实例时,每个实例都会有自己单独的一套系统数据库。
除了msdb数据库之外,其它数据库不能访问或是被损坏都会导致实例无法启动。
相比之下用户数据库由DBA或者是开发人员在数据库实例安装完毕、系统数据库都启动之后所创建的,这些数据库中保存着公司的业务资料。
ORACLE与SQLSERVER语法区别
ORACLE与SQLSERVER语法区别⼀、数据类型ORACLE与SQL SERVER在数据类型的对⽐如下:SQL SERVER ORACLE数字类型DECIMAL[(P[, S])]NUMBER[(P[, S])]NUMERIC[(P[, S])]NUMBER[(P[, S])]FLOAT[(N)]NUMBER[(N)]INT NUMBERSMALLINT NUMBERTINYINT NUMBERMONEY NUMBER[19,4]SMALLMONEY NUMBER[19,4]字符类型CHAR[(N)]CHAR[(N)]VARCHAR[(N)]VARCHAR2[(N)]⽇期时间类型DATETIME DATESMALLDATETIME DATE其它TEXT CLOBIMAGE BLOBBIT NUMBER(1)⼆、表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)在创建表及其主键、外键、CHECK、UNIQUE、DEFAULT、INDEX时,SQL SERVER 与ORACLE的语法⼤致相同。
主要区别如下:(1) Oracle定义表字段的default属性紧跟字段类型之后,如下:Create table MZ_Ghxx( ghlxh number primay key ,rq date default sysdate not null,….)⽽不能写成Create table MZ_Ghxx( ghlxh number primay key ,rq date not null default sysdate,….)三、存储过程/函数过程与函数的区别函数可以返回⼀个值给调⽤环境;⽽过程不能,过程只能通过返回参数(带“OUT”或“IN OUT”)传回去数据。
SQLSERVER中存储过程的结构⼤致如下CREATE PROCEDURE procedure_name/*输⼊、输出参数的声明部分*/ASDECLARE/*局部变量的声明部分*/BEGIN/*主体SQL语句部分*//*游标声明、使⽤语句在此部分*/ENDORACLE中存储过程的结构⼤致如下CREATE OR REPLACE PROCEDURE procedure_name( /*输⼊、输出参数的声明部分*/ )AS/*局部变量、游标等的声明部分*/BEGIN/*主体SQL语句部分*//*游标使⽤语句在此部分*/EXCEPTION/*异常处理部分*/END ;ORACLE端FUNCTION语法说明CREATE [OR REPLACE] FUNCTION function_name[(argument [{IN | OUT | IN OUT }] ) type,…[(argument [{IN | OUT | IN OUT }] ) typeRETURN return_type {IS | AS}BEGIN…END;四、变量赋值在SQL SERVER语句中⽤如下语句对局部变量赋值(初始值或数据库表的字段值或表达式):“SELECT 局部变量名 = 所赋值(初始值或数据库表的字段值或表达式)”;⽽在ORACLE中,将初始值赋给局部变量时,⽤如下语句:“局部变量名 : = 所赋值(初始值或表达式);” ,将检索出的字段值赋给局部变量时,⽤如下语句:“SELECT 数据库表的字段值 INTO 局部变量名 …” 。
SQLServer与Oracle有什么区别?
SQLServer与Oracle有什么区别?1.可操作平台上: Oracle可在所有主流平台上运⾏,Oracle数据库采⽤开放的策略⽬标,它使得客户可以选择⼀种最适合他们特定需要的解决⽅案。
客户可以利⽤很多种第三⽅应⽤程序、⼯具。
⽽SQL Server却只能在Windows上运⾏了。
但SQL Sever在Window平台上的表现,和Windows操作系统的整体结合程度,使⽤⽅便性,和Microsoft开发平台的整合性都⽐Oracle强的很多。
但Windows操作系统的稳定性及可靠性⼤家是有⽬共睹的,再说Microsoft公司的策略⽬标是将客户都锁定到Windows平台的环境当中,只有随着Windows性能的改善,SQL Server才能进⼀步提⾼。
从操作平台这点上Oracle是完全优胜于SQL Server的了。
2.安全性: 从资料上可以看到,Oracle的安全认证获得最⾼认证级别的ISO标准认证,⽽SQL Server并没有获得什么安全认证。
这⽅⾯证明了Oracle的安全性是⾼于SQL Server的。
3.成本: Orcale数据库的价格是远⽐SQL Server数据库要⾼,⼀⽅⾯Oracle的初始花费相对较⾼,特别是在考虑⼯具软件的时候,Oracle很多⼯具软件需要另外购买,与Microsoft提供免费的SQL Server⼯具软件相⽐,Oracle更显价格的不菲。
但由于SQL Server只能在Windows下运⾏的原因,普遍认为SQL Server数据库的可靠性是⽐较差的。
Oracle的性能优势体现在他的多⽤户上。
4.操作性: 操作上SQL Server明显要⽐Orcale简单,如果你⽤过Java和DOTNET的开发平台,区别的基本就是Oracle和SQL Server不同,Oracle的界⾯基本是基于Java的,⼤部分的⼯具是Dos界⾯的,甚⾄SQLPlus也是, SQL Server是跟VB⼀样,全图形界⾯,很少见到DOS窗⼝。
SQLServer与OracleSQL语法差异
SQLServer与OracleSQL语法差异以下差异将以SQL Server视⾓阐述1. 在创建函数或存储过程时,定义参数名前需要使⽤@符号1. 可以⽤ALTER PROCEDURE/FUNCTION来对已经存在的存储过程和函数的内容进⾏修改,Oracle的ALTER只可以⽤于重编译或debug。
2. 要进⾏Top-N查询时,应该使⽤SELECT TOP N [column_name]3. 进⾏Top-N查询时,以Top 10为例,如果第11、12条数据与第10条相同,也想将其进⾏输出时,应使⽤SELECT TOP N WITH TIES语句4. 如果要查询前10%的数据,可以使⽤SELECT TOP N PERCENT5. ⽤户变量名使⽤@前缀进⾏定义,⽽Oracle中是使⽤:来作为前缀1. SQL Server中没有dual虚表的概念,如果需要进⾏某函数结果的测试,直接SELECT即可。
2. Oracle捕获异常通常分为预定义和⾃定义异常,使⽤exception和when-then来进⾏捕获和异常信息抛出,⽽SQL Server中使⽤try-catch。
1. 两个数据库函数⼤部分相同,⼩部分不同的按照具体情况百度2. SQL Server中的数据库类似于schema,要使⽤哪个数据库,就使⽤use xx语句,如果要显⽰多个查询结果,则每个语句后跟go3. 做聚合分析时,SQL Server中的是grouping,Oracle中是grouping set4. 如果需要同时显⽰查询结果和⼩计,但是由于字段数量不同,⽆法⽤union显⽰,此时可以使⽤compute(Oracle中没有)1. Oracle中的with xx as后跟查询语句,⽽SQL Server中的CTE应该写成with xx (输出字段) as后跟查询语句2. SQL Server中使⽤游标遍历获取数据时,应使⽤fetch next,⽽Oracle中的是fetch,⽽且SQL Server的游标可以前后滚动;关闭游标时Oracle只需要写Close cursor就会关闭并释放资源,⽽SQL Server还需要DEALLOCATE CURSOR来释放资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Server与oracle两者区别之函数区别2010-04-22 14:27Oracle和SQL Server的常用函数对比1.数学函数①绝对值S:select abs(-1) valueO:select abs(-1) value from dual②取整(大)S:select ceiling(-001) valueO:select ceil(-001) value from dual③取整(小)S:select floor(-001) valueO:select floor(-001) value from dual④取整(截取)S:select cast(-002 as int) valueO:select trunc(-002) value from dual⑤四舍五入S:select round(23456,4) value 23460O:select round(23456,4) value from dual 2346⑥e为底的幂S:select Exp(1) valueO:select Exp(1) value from dual⑦取e为底的对数S:select log(7182818284590451) valueO:select ln(7182818284590451) value from dual;⑧取10为底对数S:select log10(10) valueO:select log(10,10) value from dual;⑨取平方S:select SQUARE(4) valueO:select power(4,2) value from dual⑩取平方根S:select SQRT(4) valueO:select SQRT(4) value from dual求任意数为底的幂S:select power(3,4) valueO:select power(3,4) value from dual取随机数S:select rand() valueO:select sys.dbms_random.value(0,1) value from dual;取符号S:select sign(-8) value -1O:select sign(-8) value from dual -12.数值比较①求集合最大值S:select max(value) value from(select 1 value unionselect -2 value unionselect 4 value unionselect 3 value)aO:select greatest(1,-2,4,3) value from dual②求集合最小值S:select min(value) value from(select 1 value unionselect -2 value unionselect 4 value unionselect 3 value)aO:select least(1,-2,4,3) value from dual③如何处理null值(F2字段中的null以10代替)S:select F1,IsNull(F2,10) value from TblO:select F1,nvl(F2,10) value from Tbl3.字符串函数①求字符序号S:select ascii('a') valueO:select ascii('a') value from dual②从序号求字符S:select char(97) valueO:select chr(97) value from dual③连接S:select '11'+'22'+'33' valueO:select CONCAT('11','22')||33 value from dual④子串位置--返回3S:select CHARINDEX('s','sdsq',2) valueO:select INSTR('sdsq','s',2) value from dual⑤模糊子串的位置--返回2,参数去掉中间%则返回7S:select patindex('%d%q%','sdsfasdqe') valueO:oracle没发现,但是instr可以通过第四个参数控制出现次数 select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6 ⑥求子串S:select substring('abcd',2,2) valueO:select substr('abcd',2,2) value from dual⑦子串代替--返回aijklmnefS:SELECT STUFF('abcdef', 2, 3, 'ijklmn') valueO:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual ⑧左补空格(LPAD的第1个参数为空格则同space函数)S:select space(10)+'abcd' valueO:select LPAD('abcd',14) value from dual⑨右补空格(RPAD的第1个参数为空格则同space函数)S:select 'abcd'+space(10) valueO:select RPAD('abcd',14) value from dual⑩发音相似性比较(这2个单词返回值一样,发音相同)S:select soundex ('Smith'), soundex ('Smythe')O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dualSQL Server中用SELECT DIFFERENCE('Smithers', 'Smythers')比较soundex的差返回0~4,4为同音,1最高4.日期函数①系统时间S:select getdate() valueO:select sysdate value from dual②求日期S:select convert(char(10),getdate(),20) valueO:select trunc(sysdate) value from dualselect to_char(sysdate,'yyyy-mm-dd') value from dual③求时间S:select convert(char(8),getdate(),108) valueO:select to_char(sysdate,'hh24:mm:ss') value from dual④当月最后一天S:不知道O:select LAST_DAY(sysdate) value from dual⑤本星期的某一天(比如星期日)S:不知道O:SELECT Next_day(sysdate,7) vaule FROM DUAL;⑥字符串转时间S:select cast('2004-09-08'as datetime) valueO:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;⑦求2日期某一部分的差(比如秒)S:select datediff(ss,getdate(),getdate()+3) valueO:直接用两个日期相减(比如d1-d2=3)SELECT (d1-d2)*24*60*60 vaule FROM DUAL;⑧根据差值求新的日期(比如分钟)S:select dateadd(mi,8,getdate()) valueO:SELECT sysdate+8/60/24 vaule FROM DUAL;ORACLE内部函数大全以及与SQLSERVER的区别:下面是Oracle支持的字符函数和它们的Microsoft SQL Server等价函数。
函数 Oracle Microsoft SQL Server把字符转换为ASCII :ASCII ASCII字串连接: CONCAT --------------(expression + expression)把ASCII转换为字符 CHR, CHAR返回字符串中的开始字符(左起) INSTR ,---------------CHARINDEX把字符转换为小写 LOWER ---------------------LOWER把字符转换为大写 UPPER-------------------- UPPER填充字符串的左边 LPAD --------------------N/A清除开始的空白 LTRIM--------------------LTRIM清除尾部的空白 RTRIM --------------------RTRIM字符串中的起始模式(pattern) INSTR --------------------PATINDEX多次重复字符串 RPAD --------------------REPLICATE字符串的语音表示 SOUNDEX --------------------SOUNDEX重复空格的字串 RPAD --------------------SPACE从数字数据转换为字符数据 TO_CHAR --------------------STR子串 SUBSTR --------------------SUBSTRING替换字符 REPLACE --------------------STUFF将字串中的每个词首字母大写 INITCAP --------------------N/A翻译字符串 TRANSLATE --------------------N/A字符串长度 LENGTH-------------------- DATELENGTH or LEN列表中最大的字符串 GREATEST-------------------- N/A列表中最小的字符串 LEAST --------------------N/A如果为NULL则转换字串 NVL-------------------- ISNULL日期函数下面是Oracle支持的日期函数和它们的Microsoft SQL Server等价函数。