SQL和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语句后使用一个语句块。
SQL与ORACLE的区别
基本定义1、如果列别名有大小写之分,并包含特殊字符或空格,那么这样的别名必须用双引号引住;2、日期数据的默认显示格式为“DD-MON-YY”,如果希望使用其他格式显示,那么必须调用TO_CHAR函数进行转换。
例:select ename,TO_CHAR(hiredate,’yyyy-mm--dd’) from emp3、使用算术表达式当执行查询操作时,可以在数字列上使用算术表达式,其中乘、除的优先级要高于加减。
如要改变优先级,可以使用括号;4、NVL函数用于将NULL转变为实际值,语法为NVL(表达式1,表达式2),如果表达式1为NULL,则返回表达式2,;如果表达式1不是NULL,则返回表达式1.参数表达式1,表达式2可以是任意数据类型,但二者的数据类型必须要匹配。
例:select ename,sal,comm,sal+nvl(comm,0) from emp;5、在where条件中使用数字值当在where条件中使用数字值时,既可以使用单引号引住数字值,也可以直接引用数字值。
6、在where条件中使用日期值必须要用单引号引住,并且日期值必须要符合日期显示格式。
如果日期值不符合默认日期格式,那么必须使用TO_DATE函数进行转换;7、在where条件中使用between…..and操作符用于指定特定范围条件,在between操作符后指定较小的一个值,在and操作符后指定较大的一个值;例:select * from emp where sal between 100 and 1000;8、在where条件中使用in操作符用于执行列表匹配操作。
当列或表达式结果匹配于列表中的任一个值时,条件字句返回true。
例:select * from emp where sal in(100,200);9、使用order by字句在执行查询操作时,默认情况下会按照数据插入的先后顺序来显示数据。
但在实际应用中经常需要对数据进行排序,以显示更直观的数据。
SQLSERVER函数大全
SQL SERVER函数大全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 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 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) orADD_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 CONVERT2进制转换为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 ServerAverage AVG AVGCount COUNT COUNTMaximum MAX MAXMinimum MIN MINStandard deviation STDDEV STDEV or STDEVPSummation SUM SUMVariance VARIANCE VAR or VARPOracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:EXTRACT(YEAR FROM 日期)T_SQL命令大全--语句功能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE VIEW --创建一个视图DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引CREATE PROCEDURE --创建一个存储过程DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建一个触发器DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除一个域--数据控制GRANT --授予用户访问权限DENY --拒绝用户访问REVOKE --解除用户访问权限--事务控制COMMIT --结束当前事务ROLLBACK --中止当前事务SET TRANSACTION --定义当前事务数据访问特征--程序化SQLDECLARE --为查询设定游标EXPLAN --为查询描述数据访问计划OPEN --检索查询结果打开一个游标FETCH --检索一行查询结果CLOSE --关闭游标PREPARE --为动态执行准备SQL 语句EXECUTE --动态地执行SQL 语句DESCRIBE --描述准备好的查询---局部变量declare @id char(10)--set @id = '10010001'select @id = '10010001'---全局变量---必须以@@开头--IF ELSEdeclare @x int @y int @z intselect @x = 1 @y = 2 @z=3if @x > @yprint 'x > y' --打印字符串'x > y' else if @y > @zprint 'y > z'else print 'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’then e_wage*1.08when job_level = ’2’then e_wage*1.07when job_level = ’3’then e_wage*1.06else e_wage*1.05end--WHILE CONTINUE BREAKdeclare @x int @y int @c intselect @x = 1 @y=1while @x < 3beginprint @x --打印变量x 的值while @y < 3beginselect @c = 100*@x + @yprint @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1end--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay ’01:02:03’select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time ’23:08:00’select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operator valueex 宿主)select * from stock_information where stockid = str(nid)stockname = 'str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' --------- ([]指定值的范围)stockname like '[^F-M]%' --------- (^排除指定范围)---------只能在使用like关键字的where子句中使用通配符)or stockpath = 'stock_path'or stocknumber < 1000and stockindex = 24not stocksex = 'man'stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) ---------排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)---------子查询---------除非能确保内层select只返回一个行的值,---------否则应在外层where子句中用一个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name select stockname , "stocknumber" = count(*) from table_name group by stockname --------- group by 将表按行分组,指定列中有相同的值having count(*) = 2 --------- having选定指定的组select *from table1, table2where table1.id *= table2.id --------左外部连接,table1中有的而table2中没有得以null表示table1.id =* table2.id --------右外部连接select stockname from table1union [all] ----- union合并查询结果集,all-保留重复行select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx") value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name -----------删除表中所有行,仍保持表的完整性drop table table_name ---------------完全删除表***alter table*** ---修改数据库表结构alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ----显示表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... -----实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default ----删除Stockname的default约束***function(/*常用函数*/)***----统计函数----AVG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expression) --返回以弧度表示的角的正弦COS(float_expression) --返回以弧度表示的角的余弦TAN(float_expression) --返回以弧度表示的角的正切COT(float_expression) --返回以弧度表示的角的余切/***反三角函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的自然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平方根/***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π即3.1415926535897936RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运行结果如下----------------------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------------------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression> AS <data_ type>[ length ])CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression> [, style])select cast(100+99 as char) convert(varchar(12), getdate())运行结果如下------------------------------------------199 Jan 15 2000----日期函数----DAY() --函数返回date_expression 中的日期值MONTH() --函数返回date_expression 中的月份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date> )--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date> )--函数返回两个指定日期在datepart 方面的不同之处DATENAME(<datepart> , <date> ) --函数以字符串的形式返回日期的指定部分DATEPART(<datepart> , <date> ) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'> ) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id> ) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name]}--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(<check_expression>, <replacement_value> ) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2> )--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值。
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'
SQL与Oracle对数据库事务处理的差异性(doc 8页)
SQL与Oracle对数据库事务处理的差异性(doc 8页)SQL 和Oracle对数据库事务处理的差异性作者: Jake, 出处:IT专家网论坛,责任编辑: 陈子琪,2009-10-11 13:00在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MS SQL Server和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法。
背景在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MS SQL Server和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法。
简介本文讲述MS SQL Server和Oracle对数据库事务处理的差异性,以及Oracle如何对事务处理的实现。
什么是事务帐就不平了。
也例如有些销售系统的汇总表和明细表,是一个主表和一个从表,需要同步更新。
2.并发时分离不同事务操作。
例如编辑过程中的数据不给其他事务查询到。
这也是相对的,在特效需求下可能要支持dirty read(脏读),但不是这里讨论的范围了。
SQL Server 2008 的事务类型1.自动提交事务Autocommit Transactions这是SQL Server默认的事务类型,每一条单独的SQL语句(SQL statement)都是单独的一个事务,语句执行完毕后自动提交。
调用方不需要手工控制事务流程。
2.显示事务Explicit Transactions调用方需要调用API或者使用T-SQL的BEGIN TRANSACTION语句来打开事务。
需要调用COMMIT或者ROLLBACK TRANSACTION 来提交或者回滚。
3.隐式事务Implicit Transactions使用SETIMPLICIT_TRANSACTIONS ON把事务模式变成隐式模式。
调用方不需要执行BEGIN TRANSACTION 语句来打开事务。
SQL2008_vs_Oracle11g对比
SQL Server 2008 对比Oracle Database 11g白皮书摘要:Microsoft SQL Server具有和其它数据库系统一样稳定的基础,而现在它更在性能、可扩展性、安全性、开发人员生产力、商业智能(BI)和与2007 Microsoft Office System 的兼容性方面更胜一筹。
它做到了这些,而它的成本比Oracle Database 11g要低得多。
1. 执行摘要Microsoft SQL Server 2008在与你的业务相关的方面胜过Oracle。
下面总结了SQL Server 2008胜出的一些关键任务方面。
性能和可扩展性由强大的行业标准基准结果证明,SQL Server 延伸到了一些全球最大的工作负载。
像Unilever、Citi、Barclays Capital和Mediterranean Shipping之类的客户在SQL Server 上运行它们的最关键任务应用程序。
运行SQL Server2008的客户,包括大型的独立软件开发商例如Siemens和RedPrairie,表示使用最新的改进了可扩展性的版本后,感觉非常好。
SQL Server被CRN Magazine认做是最好的销售商和发展最好的销售商。
安全在过去的四年里National Vulnerability Database (NIST)报告了在Oracle数据库产品中的330多个主要的安全漏洞。
而在同一时间,关于SQL Server 2005的漏洞一个都没有。
这个结果来自于可信赖计算计划(Trustworthy Computing Initiative)中的安全引擎处理部分、广泛的安全特性和一个强大的Microsoft更新基础构建。
这个成功的结合为客户降低了安全风险和打补丁的停机时间。
根据一个专家介绍,在补丁管理方面,Oracle 落后于Microsoft五年的时间。
Computerworld报告显示三分之二的Oracle数据库管理员不使用安全补丁。
sql与oracle的区别
001、SQL与ORACLE的内存分配ORACLE的内存分配大部分是由INIT.ORA来决定的,一个数据库实例可以有N种分配方案,不同的应用(OLTP、OLAP)它的配置是有侧重的。
SQL概括起来说,只有两种内存分配方式:动态内存分配与静态内存分配,动态内存分配充许SQL自己调整需要的内存,静态内存分配限制了SQL对内存的使用。
002、SQL与ORACLE的物理结构总得讲,它们的物理结构很相似,SQL的数据库相当于ORACLE的模式(方案),SQL的文件组相当于ORACLE的表空间,作用都是均衡DISK I/O,SQL创建表时,可以指定表在不同的文件组,ORACLE则可以指定不同的表空间。
CREATE TABLE A001(ID DECIMAL(8,0)) ON [文件组]--------------------------------------------------------------------------------------------CREATE TABLE A001(ID NUMBER(8,0)) TABLESPACE 表空间注:以后所有示例,先SQL,后ORACLE003、SQL与ORACLE的日志模式SQL对日志的控制有三种恢复模型:SIMPLE、FULL、BULK-LOGGED;ORACLE对日志的控制有二种模式: NOARCHIVELOG、ARCHIVELOG。
SQL的SIMPLE相当于ORACLE 的NOARCHIVELOG,FULL相当于 ARCHIVELOG,BULK-LOGGED相当于ORACLE大批量数据装载时的NOLOGGING。
经常有网友抱怨SQL的日志庞大无比且没法处理,最简单的办法就是先切换到SIMPLE模式,收缩数据库后再切换到FULL,记住切换到FULL 之后要马上做完全备份。
004、SQL与ORACLE的备份类型SQL的备份类型分的极杂:完全备份、增量备份、日志备份、文件或文件组备份;ORACLE 的备份类型就清淅多啦:物理备份、逻辑备份;ORACLE的逻辑备份(EXP)相当于SQL 的完全备份与增量备份,ORACLE的物理备份相当于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
微软sql与oracle数据库对比
Microsoft® SQL Server 2000与Oracle®9i™ Database 的比较产品市场部目录概述 (4)可用性 (5)整体比较 (5)高可用性集群技术 (5)Real Application Clusters (RAC) (6)复制 (6)备份与恢复 (8)在线检查数据库 (9)备用服务器 (10)Log Shipping (10)总结 (10)可扩展性 (11)总体比较 (11)支持超大型数据库 (VLDB) (11)OLTP: 向上扩展 (11)OLTP: 向外扩展 (13)实例创建 (14)索引与并行查询 (15)调校参数 (15)最优化监视 (15)总结 (16)安全性 (17)总体比较 (17)一般性安全 (17)审核 (17)Profiling for Auditing (18)事件通知 (18)总结 (18)互用性 (19)整体比较 (19)异类复制 (20)总结 (20)可管理性 (21)整体对比 (21)总结 (23)可编程能力 (24)整体对比 (24)易用性 (26)整体对比 (26)总结 (26)DATA WAREHOUSING (OLAP)能力 (27)整体对比 (27)公共特性对比 (27)总结 (28)数据挖掘能力 (29)整体对比 (29)图形化访问 (29)数据挖掘操作 (29)比较能力 (30)总结 (30)移动性 (31)整体对比 (31)体系结构 – 不同版本 (31)总结 (32)结论 (33)概述要完全了解Microsoft® SQL Server 与Oracle9i™ Database 可不是件简单的事。
本文介绍了Microsoft SQL Server 2000与Oracle9i Database的功能并在最后附录中介绍了最新的Oralce 10g 与Microsoft SQL Server 2000的售价,并做了比较。
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对比这两种数据库之间架构上的比较操作系统的支持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调优
内容安排
第一部分:背景知识 第二部分:SQL调优 第三部分:工具介绍
第一部分 背景知识
执行计划的相关概念
Rowid的概念
rowid是一个伪列,既然是伪列,那么这个列 就不是用户定义,而是系统自己给加上的。对 每个表都有一个rowid的伪列,但是表中并不 物理存储ROWID列的值。不过你可以像使用其 它列那样使用它,但是不能删除改列,也不能 对该列的值进行修改、插入。一旦一行数据插 入数据库,则rowid在该行的生命周期内是唯 一的,即即使该行产生行迁移,行的rowid也 不会改变。
可选择性(selectivity)
比较一下列中唯一键的数量和表中的行 数,就可以判断该列的可选择性。如果 该列的”唯一键的数量/表中的行数”的 比值越接近1,则该列的可选择性越高, 该列就越适合创建索引,同样索引的可 选择性也越高。在可选择性高的列上进 行查询时,返回的数据就较少,比较适 合使用索引查询。
语句的解析时间; 优化索引的使用; 优化表连接方法; 优化子查询;
常见可能导致全表扫描的操作
使用null条件的查询:where xxx is null; 对没有索引的字段查询; 带有like条件的查询:where xxx like ‘%x’; 带有not equals条件的查询:<> , !=, not in等
在会话层使用alter session set optimizer_goal= all_rows/first_rows/choose;
在SQL中添加提示 /*+ hint */ 设置choose模式时候,将根据是否存在表或索
引的统计资料来决定选择RBO或CBO;
CBO 特性
前提条件:存在表和索引的统计资料;使用 analyze table 和 analyze index 命令从表或索 引中收集统计资料(表的记录平均长度,记录 数等);如果没有现存的统计资料,将在sql运 行时收集资料,会大大降低性能;
ORACLE和SQL语法区别归纳
ORACLE和SQL语法区别归纳数据类型比较类型名称OracleSQLServer比较字符数据类型 CHAR CHAR 都是固定长度字符资料但oracle里面最大度为2kb,SQLServer里面最大长度为8kb变长字符数据类型 VARCHAR2 VARCHAR Oracle里面最大长度为4kb,SQLServer里面最大长度为8kb根据字符集而定的固定长度字符串 NCHAR NCHAR 前者最大长度2kb后者最大长度4kb根据字符集而定的可变长度字符串 NVARCHAR2 NVARCHAR 二者最大长度都为4kb日期和时间数据类型 DATE 有Datetime和Smalldatetime两种在oracle里面格式为DMY在SQLSerser里面可以调节,默认的为MDY数字类型 NUMBER(P,S) NUMERIC[P(,S)] Oracle里面p代表小数点左面的位数,s代表小数点右面的位数。
而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。
数字类型 DECIMAL(P,S) DECIMAL[P(,S)] Oracle里面p代表小数点左面的位数,s代表小数点右面的位数。
而SQLServer里面p代表小数点左右两面的位数之和,s代表小数点右面的位数。
整数类型 INTEGER INT 同为整数类型,存储大小都为4个字节浮点数类型 FLOAT FLOAT实数类型 REAL REALORACLE内部函数大全以及与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等价函数。
OracleHiveImpalaSQL比较1
OracleHiveImpalaSQL⽐较15 Function指数据库内置的function,不讨论UDF。
另外,操作符都不⽐较了,区别不⼤。
5.1 数学函数功能Oracle Hive Impala ABS绝对值,有有有SIN/SINH/ASIN/COS/COSH/ACOS/TAN/TANH/ATAN/ATAN2三⾓函数其中ATAN2接受两个参数(⼆维平⾯中的坐标)没有SINH/COSH/TANH/ATAN2同hiveBITAND按位与,有CEIL天花板值,有有,还有个别名CEILING有,同hive EXP e的多少次,有有,还有个函数E()返回e有,同hive FLOOR地板值,有有有LN以e为底的log,有有有LOG以某个double为底的log,有有,还有两个特殊底的log:LOG2和LOG10有,同hiveMOD Oracle的MOD的计算⽅式为MOD(n2,n1)=n2 - n1 *FLOOR(n2/n1),这与经典取模还不同,⽐如Oracle的MOD(-11,4)=-3,但经典取模等于1在hive⾥取模⽤PMOD,返回值⼀定是个正数,⽐如PMOD(-11,4)=1。
但这与经典取模还是不同,⽐如PMOD(-11,-4)=1,但经典取模等于-3Impala的PMOD和hive的PMOD相同,另外Impala还有个FMOD和Oracle的MOD相同POWER求幂,有有,还有个别名POW有,同hiveREMAINDER 取余,REMAINDER(n2,n1)=n2 - n1 * FLOOR(n2/n1)ROUND舍⼊,⽀持1个参数和2个参数两种版本有另外还有⼀个BROUND,使⽤HALF_EVEN舍⼊模式,见官⽅⼿册有,同OracleSIGN符号函数,有有有SQRT开⽅,有有有TRUNC截取数值的⼩数点后多少位(如果是负值则往前推)DEGREES/RADIANS⾓度/弧度互转同hivePOSITIVE/NEGATIVE相当于在数值前加+/-号(因此没什么卵⽤)同hive PI返回pi值同hive FACTORIAL阶乘,1.2.0以后才有CBRT求⽴⽅根,1.2.0以后才有SHIFTLEFT/SHIFTRIGHT/SHIFTRIGHTUNSIGNED按位左移/右移/⽆符号右移GREATEST/LEAST 返回⼀串值中的最⼤/最⼩值,这串值的类型可以是任意,只要可⽐较⼤⼩(所以其实不是数学函数⽽是通⽤⽐较)有,1.1.0以后有5.2 字符(串)函数功能Oracle Hive Impala ASCII输⼊必须char,返回该字符的ascii数值输⼊String,返回该String第⼀个字符的ascii数值同hiveBASE64 / UNBASE64将⼆进制值转为base64的String(UN则是反向)CONCAT CONCAT(char1, char2)char或char2均可为CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,or NCLOB之⼀concat(string|binary A, string|binaryB...)可以有多个参数另外提供CONCAT_WS⽤于指定特殊分隔符的连接同hive(除了不⽀持binary类型),且也有CONCAT_WSstring decode(binary bin, stringcharset)binary encode(string src, string(其实oracle和impala也有DECODE,但作⽤完全不同,DECODE/ENCODE charset)编码和解码⽤的,⽤于⽀持hive特有的binary类型见条件函数中的DECODE)FIND_IN_SET find_in_set(string str, string strList) strList是⽤’,’分割的⼀组string,该函数将寻找strList中第⼀个精确匹配的str同hiveFORMAT_NUMBER将数字格式化为string GET_JSON_OBJECT抽取JSON对象,不常⽤IN_FILE in_file(string str, string filename)检测str是否为filename对应⽂件中的某⾏,不常⽤INITCAP将每个单词(以空⽩分隔)转换为⾸字母⼤写其余⼩写的形式同oracle,1.1.0开始有同oracleINSTR { INSTR| INSTRB| INSTRC| INSTR2| INSTR4}(string , substring [, position [, occurrence ] ])搜索⼦串,不同数据类型调⽤名不同,最多可带四个参数,其中第三个是开始位置,第四个是出现的第⼏次instr(string str, string substr)只接受两个参数同hiveLENGTH { LENGTH| LENGTHB| LENGTHC| LENGTH2| LENGTH4}(char)串长,不同数据类型调⽤名不同有(仅LENGTH)同hiveLEVENSHTEIN返回两个串的Levenshtein距离(编辑距离)1.2.0后才有LOCATE 特殊情况的INSTR,可以指定匹配的开始位置。
Oracle与SQL的区别
Oracle与SQL的区别着信息技术的飞速发展,数据处理不仅在数量上要求越来越大,而且在质量上也要求越来越高。
Oracle数据库在大多数企业中受到广泛使用,而SQL Server数据库也因为和Windows的联系,在企业中的使用也是非常广泛。
操作系统的稳定对数据库来说是十分紧要的,在数据库可操作平台上,Oracle可在所有主流平台上运行,Oracle数据库采用开放的策略目标,它使得客户可以选择一种最适合他们特定需要的解决方案。
客户可以利用很多种第三方应用程序、工具。
对开发商来说是很大的支持。
而SQL Server却只能在Windows上运行了,这个就显得比较单调了,但SQL Sever在Window平台上的表现,和Wind ows操作系统的整体结合程度,使用方便性,和Microsoft开发平台的整合性都比Oracle强的很多。
但Windows操作系统的稳定性及可靠性大家是有目共睹的,再说Microsoft公司的策略目标是将客户都锁定到Windows平台的环境当中,只有随着Windows性能的改善,S QL Server才能进一步提高。
从操作平台这点上Oracle是完全优胜于SQL Server的了。
从资料上可以看到,Oracle的安全认证获得最高认证级别的ISO标准认证,而SQL Server并没有获得什么安全认证。
这方面证明了Oracle的安全性是高于SQL Server的。
购买一个产品,首先考虑的当然是产品的性能了,当考虑性能的同时当然少不了究竟要花多少钱在这产品也是个很关键的问题。
要建立并运行一个数据库系统。
不仅仅包含最初购置软件、硬件的费用,还包含了培训及以后维护的费用。
Orcale数据库的价格是远比SQL Server数据库要高,为什么Oracle数据库比SQL Serve r数据库价格上要高出那么多,一方面Oracle的初始花费相对较高,特别是在考虑工具软件的时候,Oracle很多工具软件需要另外购买,与Microsoft提供免费的SQL Server工具软件相比,Oracle更显价格的不菲。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 -114.圆周率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 Tbl21.求字符序号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 CONCA T('11','22')33 value from dual 23.子串位置--返回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可以通过第四个参数控制出现次数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 和DA TENAME 函数(第一个参数决定)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标准时间。