sql server和oracle常用函数对比
SQL Server和Oracle的通用函数
AF_BITVAL
返回整数的第几位数数值,0或1。
AF_BITVAL(ADEC,ABITNum)
参数:ADEC要检测的十进制数值
ABITNum第几位数
返回类型:0或1
参考:
T-SQL:
PL/SQL:
AF_SHL
左移位
AF_SHL(ADEC,ANum)
参数:ADEC要移位的十进制数值
ANum向左移位数
1.5
不可以使用TOP子句限制返回到结果集中的行数。
如:select top 1 * from zd_ry
2
2
函数名
语法
备注
字符类函数
AF_ASCII
返回字符表达式最左端字符的ASCII代码值。
AF_ASCII(AChar)
参数:字符表达式
返回类型:int
参考:
T-SQL:ASCII
PL/SQL:ASCII
PL/SQL:NVL
AF_ISNULLD
使用指定的替换值替换日期NULL。
AF_ISNULLD(ADate1, ADate2)
参数:ADate1为将被检查是否为NULL的日期表达式。
ADate2为在ADate1为NULL时将返回的日期表达式。
返回类型:日期
参考:
T-SQL:ISNULL
PL/SQL:NVL
参考:
T-SQL:ISNULL
PL/SQL:NVL
AF_ISNULLN
使用指定的替换值替换数值NULL。
AF_ISNULLN(ANum1, ANum2)
参数:ANum1为将被检查是否为NULL的数值表达式。
ANum2为在ANum1为NULL时将返回的数值表达式。
SQLserver、Oracle、Mysql语法与用法对比(over)
alter table表名
add constraint唯一约束名unique (列名)
完全一样
altertable表名addunique(列名)
添加默认约束
alter table表名
add constraint default (值) for列名
完全一样
添加检查约束
alter table表名
add constraint check (列名> 10)
完全一样
添加外键约束
alter table子表
add constraiห้องสมุดไป่ตู้t外键约束名foreign key
(子表的列名) references主表(列名)
on update cascade / on update action
注意:
默认和加on update action表示更新受限
alter table表名Add列名数据库类型
删除表中一列
alter table表名drop column列名
alter table表名drop column列名
修改表现有列
alter table表名alter column列名
新数据库类型大小
alter table表明modify(列名数据类型)
删除约束
加on update cascade表示更新不受限,多项
操作时用逗号隔开
完全一样
添加索引约束
altertable表名addindex索引名(列名)
添加普通索引:
create index索引名ON表名(列名)
添加唯一索引:
create unique索引名ON表名(列名)
删除索引
sqlserver与oracle差异汇总
SQL server 与Oracle开发比较本文档主要从oracle与sql server语法上进行差异性比较,诸如两者在管理,性能,优化等方面的差异不作比较。
●概念上区别1.Oracle 是一种对象关系数据库管理系统(ORDBMS),而Sql server 只是关系型数据库管理系统(RDBMS).2.Oracle使用Internet文件系统,该系统基于Java的应用程序,可以使数据库基于成为Internet的开发平台;Sql server 是基于windows3.两者支持的命令类别差不多,数据定义语言,数据操纵语言,事务处理控制语言,数据控制语言.在Oracle中,在事务控制语言中除了commit,rollback等还多了一个Savepoint,设置保存点。
4.oracle sql的扩展叫PL/SQL,主要的结构化查询工具有sql*plus,isql*plus, pl/sql等,Ms sql的扩展叫Transact-SQL,主要的结构化查询工具就是自带的查询分析器5.主要数据类型Orace:主要支持char ,varchar2,long,number,datetime,raw,longraw,clob,blob,bfie前面三个是Character数据类型,varchar2支持可变长度的字符串,long支持可变长度的字符数据,raw,long raw用于存储二进制数据,long raw 可变长度最后三个是大对象(lob)数据类型,存储非结构化的信息,例如声音剪辑,视频文件CLOG表示Character Lob,可以存储大量的字符数据,它对于存储非结构化的XML 文档非常有用。
BLOG表示Binary LOG,此数据类型可以存储大型二进制对象,如图形、视频剪辑,声音文件等支不支持,money,货币Sql server 主要支持的文本类型char ,varchar,nchar,nvarchar,text,ntext,image,货币类型Money,二进制 binary,varbinary等等●开发语法A.SQL 语法两者的SQL语法基本上是相同的,只是一些细节方面的问题一、表的管理:修改表的结构,如增加,删除列,创建表修改表1.修改表的列的数据类型,大小的定义不同,如下面修改数据类型。
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与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 局部变量名 …” 。
Oracle与SQL-Server的SQL语法差别
select d.deptname, e.ename from dept d, emp e where d.empno *= e.enum;
Oracle
select d.deptname,e.ename from dept d, emp e where d.empno = e.enum (+);
精选PPT
Oracle
• sqlplus
精选PPT
11
II. A Little More Detail
• Outer Join • Sub-Queries in Place of Columns • Deletes With a Second From Clause
精选PPT
12
Outer Join
SQL Server
精选PPT
2
Agenda
I. Quick Intro for SQL Server Users II. Some Detail: Joins, Subqueries, Deletes III. Certain Conceptual Differences IV. Powerful New Features V. Summary & References
FROM sales s;
精选PPT
15
Delete with Second From Clause
SQL Server
delete from products from products, product_deletes where products.a =
13
SubQueries in Place of Columns
• SQL Server
select distinct year, q1 = (select Amount amt FROM sales where Quarter=1 AND year = s.year), q2 = (SELECT Amount amt FROM sales where Quarter=2 AND year = s.year), q3 = (SELECT Amount amt FROM sales where Quarter=3 AND year = s.year), q4 = (SELECT Amount amt FROM sales where Quarter=4 AND year = s.year)
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语句。
ORACLE与SQL SERVER的日期函数比较
25. CONVERT(varchar(100), GETDATE(), 101): 07/28/2008
26. CONVERT(varchar(100), GETDATE(), 102): 2008.07.28
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
39. CONVERT(varchar(100), GETDATE(), 120): 2008-07-28 10:57:49
40. CONVERT(varchar(100), GETDATE(), 121): 2008-07-28 10:57:49.700
Sql Server 中一个非常强大的日期格式化函数
27. CONVERT(varchar(100), GETDATE(), 103): 28/07/2008
28. CONVERT(varchar(100), GETDATE(), 104): 28.07.2008
29. CONVERT(varchar(100), GETDATE(), 107): 28-07-2008
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
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.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 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 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 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) 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与Sql-Server函数对照
Oracle与Sql-Server函数对照下面是Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:函数 OracleSQL Server把字符转换为ASCII : ASCII ASCII字串连接: CONCAT (expression + expression)把ASCII转换为字符CHR CHAR返回字符串中的开始字符(左起)INSTR CH ARINDEX把字符转换为小写LOWER LOWER把字符转换为大写UPPER UPPER填充字符串的左边LPAD N/A清除开始的空白LTRIM LTRIM清除尾部的空白RTRIM RTRIM字符串中的起始模式(pattern)INSTR PATINDEX多次重复字符串RPAD REPLICATE字符串的语音表示SOUNDEX SOUNDEX重复空格的字串RPAD SPACE从数字数据转换为字符数据TO_CHAR STR子串SUBSTRSUBSTRING替换字符 REPLACE STUFF将字串中的每个词首字母大写INITCAP N/A翻译字符串TRANSLATE N/A字符串长度LENGTH DATELENGTH or LEN列表中最大的字符串 GREATEST N/A列表中最小的字符串LEAST N/A如果为NULL则转换字串NVL ISNULL日期相加 (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_CHARUSER_NAME当前用户CURRENT_USERCURRENT_USER在CONNECT BY子句中的级别 LEVEL N /AAverage AVG AVGCount COUNT COUNTMaximum MAXMAXMinimum MINMINSummation SUM SUMVariance VARIANCEVAR or VARP特殊的几种:1..字串连接Oracle使用两个管道符号(||)来作为字串连接操作符,SQL Server则使用加号(+)。
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;编后:如果您认为有侵权的地方,请来信说明,本人将立即删去。
SqlServer与Oracle语法差异
13
Oracle中没有selectsysdateasnowDate的写法,正确的应该是加个虚表dual
selectsysdateasnowDatefrom dual
14
Oracle中,字段名,表名,别名,索引名,视图名等名称的长度不能超过30个字符
15
Oracle中,字段名都是大写的,即使select语句中是小写,得到的结果也是大写。因此,select到DataTable中后,binding到wpf时如果大小写不同,会绑定失败。在DataTable中分组和排序,也会失败。因此,尽量将DataTable中的字段名称改为大写。
{
if (Global.CacheServerConfiger.IsOracle)
{
_sqlserverSql= _sqlserverSql.Trim();
if (!_sqlserverSql.EndsWith(";"))
{
_sqlserverSql+= ";";
}
_sqlserverSql= _sqlserverSql.Replace("\r\n", " ").Replace("\n", " ");
4
sql语句中的+,改为||
5
Oracle中,在sql中做除法时,需要进行以下操作,否则c#中会算术溢出
round(count(*)/(cast(3 as float)), 28) --cast(3 as float)是为了和sqlserver保持一致,28是最大精度,不能大于28
6
日期在SqlServer中可以按照字符串操作,但在Oracle中不行
深度对比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与SQL-Server的SQL语法差别
• sqlplus
II. A Little More Detail
• Outer Join • Sub-Queries in Place of Columns • Deletes With a Second From Clause
Outer Join
SQL Server select d.deptname, e.ename from dept d, emp e where d.empno *= e.enum;
Beginning SQL: Differences Between SQL Server and Oracle
A Quick Intro for SQL Server Users
Les Kopari Independent Consultant
Introduction
If you're new to SQL or just new to Oracle SQL, perhaps coming from a Microsoft SQL Server environment, it may seem like the two versions should be very similar, and they are, to a certain degree, but they are also very different in some important and basic ways.
SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234-
1234', ' [[:digit:]]{5}(-[[:digit:]]{4})?$')
Oracle与SQL-Server的SQL语法差别
Delete with Second From Clause
SQL Server
delete from products from products, product_deletes where products.a =
product_deletes.a and products.b = product_deletes.b and product_deletes.c = 'd';
Oracle select d.deptname,e.ename from dept d, emp e where d.empno = e.enum (+);
SubQueries in Place of Columns
• SQL Server
select distinct year, q1 = (select Amount amt FROM sales where Quarter=1 AND year = s.year), q2 = (SELECT Amount amt FROM sales where Quarter=2 AND year = s.year), q3 = (SELECT Amount amt FROM sales where Quarter=3 AND year = s.year), q4 = (SELECT Amount amt FROM sales where Quarter=4 AND year = s.year)
Time
SQL Server Datetime: 1/300th second
Oracle Date: 1 second Timestamp: 1/100 millionth second
Column Aliases
Oracle与SQL-Server的SQL语法差别精品文档
Oracle
Schema Role Index PL/SQL procedure PL/SQL function BEFORE trigger After trigger Sequence
Only in Oracle
• Clusters • Packages • Triggers for each row • Synonyms • Snapshots
The Connect Concept
SQL Server Multiple databases
Oracle Single Database Multiple tablespaces, schemas, users
Other Conceptual Differences
SQL Server
Database owner, DBO Group/Role Non-unique index T-SQL stored procedure { Trigger Compex rule Column identity property
SQL Server
select getdate() mycolumn into mytable;
Oracle
insert into mytable (mycolumn) values(sysdate);
Inserts
SQL Server
Insert mytable values(‘more text’);
Deletes
SQL Server
delete mytable where mycolumn like 'some%';
Oracle
delete from mytable where mycolumn like 'some%';
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.四舍五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from dual 1.2346
6.e为底的幂
S:select Exp(1) value 2.7182818284590451
O:select to_char(sysdate,'hh24:mm:ss') value from dual
39.取日期时间的其他部分
S:DATEPART 和 DATENAME 函数 (第一个参数决定)
O:to_char函数 第二个参数决定
参数---------------------------------下表需要补充
43.求两日期某一部分的差(比如秒)
S:select datediff(ss,getdate(),getdate()+12.3) value
O:直接用两个日期相减(比如d1-d2=12.3)
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
44.根据差值求新的日期(比如分钟)
12.取随机数
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dect sign(-8) value -1
O:select sign(-8) value from dual -1
24.求子串
S:select substring('abcd',2,2) value
O:select substr('abcd',2,2) value from dual
25.子串代替 返回aijklmnef
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
O:select Exp(1) value from dual 2.71828182
7.取e为底的对数
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from dual; 1
35.系统时间
S:select getdate() value
O:select sysdate value from dual
36.前后几日
直接与整数相加减
37.求日期
S:select convert(char(10),getdate(),20) value
16.Asin,Acos,Atan,Atan2 返回弧度
17.弧度角度互换(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度
---------数值间比较
18. 求集合最大值
S:select max(value) 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) value from dual
19. 求集合最小值
20.如何处理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') value
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual
26.子串全部替换
S:没发现
O:select Translate('fasdbfasegas','fa','我' ) value from dual
27.长度
41.本星期的某一天(比如星期日)
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;
S:select dateadd(mi,8,getdate()) value
O:SELECT sysdate+8/60/24 vaule FROM DUAL;
45.求不同时区时间
S:不知道
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule 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无效)
O:select trunc(sysdate) value from dual
select to_char(sysdate,'yyyy-mm-dd') value from dual
38.求时间
S:select convert(char(8),getdate(),108) value
----------数学函数
14.圆周率
S:SELECT PI() value 3.1415926535897931
O:不知道
15.sin,cos,tan 参数都以弧度为单位
例如:select sin(PI()/2) value 得到1(SQLServer)
minute mi, n (n O无效)
second ss, s (s O无效)
millisecond ms (O无效)
----------------------------------------------
40.当月最后一天
S:不知道
O:select LAST_DAY(sysdate) value from dual
SQLServer和Oracle的常用函数对比
1.绝对值
S:select abs(-1) value
O:select abs(-1) value from dual
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
S:len,datalength
O:length
28.大小写转换 lower,upper
29.单词首字母大写
S:没发现
O:select INITCAP('abcd dsaf df') value from dual
30.左补空格(LPAD的第一个参数为空格则同space函数)
-----时区参数,北京在东8区应该是Ydt-------
AST ADT 大西洋标准时间
BST BDT 白令海标准时间
CST CDT 中部标准时间
EST EDT 东部标准时间
O:select ascii('a') value from dual
22.从序号求字符
S:select char(97) value
O:select chr(97) value from dual
23.连接
S:select '11'+'22'+'33' value
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差
返回0-4,4为同音,1最高
--------------日期函数
23.模糊子串的位置 --返回2,参数去掉中间%则返回7
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6
S:select space(10)+'abcd' value
O:select LPAD('abcd',14) value from dual
31.右补空格(RPAD的第一个参数为空格则同space函数)