oracle与sql的区别(常用函数)
许多软件公司都理解开发不依赖于特定数据库类型(例如Oracle SQL Server DB )的应用程序的重要性 它可以让客户们选择自己习惯的平台 一般来说 软件开发人员都能够识别出他们的负责数据库维护的客户 和必须使用现有平台和个性化的客户
关于Oracle和SQL Server之间的区别 已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别 在这篇文章里面 我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别 并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法 与此同时 我不会再论讨对于应用程序来说 两个平台之间显而易见的区别 例如表的分割和索引
定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库 想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的 这是一家志愿者成员的组织(用私人基金运转) 他们在有关设备和程序等广泛领域内开发了国家承认的标准 在数据库领域 ANSI定义了编写SQL命令的标准 假设命令可以运行在任何的数据库上 而不需要更改命令的语法
ODBC是开放数据库连接(ODBC)接口 微软定义的 它可以让应用程序访问数据库管理系统(DBMS)中的数据 使用SQL作为访问数据的标准 ODBC允许最大的互联性 这意味着一个单个的应用程序可以访问不同的数据库管理系统 然后 应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上 OLE DB是ODBC的继承者 是一组允许例如基于VB C++ Access等任何可以连接到类似SQL Server Oracle DB MySQL等后台的 前台 的软件组件 在许多种情况下 OLE DB组件都比原有的ODBC提供了好得多的性能
JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库 SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间 进行不依赖于数据库的连接的行业标准 JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口 真实世界中的通用接口不幸的是 并不是所有数据库级别的命令都是ANSI 每个数据库平台都有自己的扩展功能 对于ANSI或者通用接口 一般来说都代表着几本功能 因此也可能意味着丧失了性能方面的竞争力 对于小型数据库和小型应用程序来说 要维护对数据库的通用访问是简单的 但是当数据库和/或应用程序变得越来越大 越来越复杂 你就不得不向代码中添加功能
SQL Server和Oracle的常用函数对比
数学函数
绝对值
S:select abs( ) value
O:select abs( ) value from dual
取整(大) S:select ceiling( ) value O:select ceil( ) value from dual
取整(小)
S:select floor( ) value O:select floor( ) value from dual
取整(截取)
S:select cast( as int) value O:select trunc( ) value from dual
四舍五入S:select round( ) value O:select round( ) value from dual
e为底的幂S:select Exp( ) value O:select Exp( ) value from dual
取e为底的对数S:select log( ) value O:select ln( ) value from dual;
取 为底对数
S:select log ( ) value
O:select log( ) value from dual;
取平方
S:select SQUARE( ) value
O:select power( ) value from dual
取平方根
S:select SQRT( ) value
O:select SQRT( ) value from dual
求任意数为底的幂S:select power( ) value O:select power( ) value from dual
取随机数
S:select rand() value
O:select sys dbms_random value( ) value from dual;
取符号
S:select sign( ) value
O:select sign( ) value from dual
三角函数相关
圆周率S:SELECT PI() value
O:不知道
sin cos tan 参数都以弧度为单位
例如 select sin(PI()/ ) value得到 (SQLServer)
Asin Acos Atan Atan 返回弧度
弧度角度互换(SQLServer Oracle不知道)
DEGREES 弧度 〉角度
RADIANS 角度 〉弧度
数值间比较
求集合最大值
S:select max(value) value from
(select value
union
select value
union
select value
union
select value)a
O:select greatest( ) value from dual
求集合最小值
S:select min(value) value from
(select value
union
select value
union
select value
union
select value)a
O:select least( ) value from dual
如何处理null值(F 中的null以 代替) S:select F IsNull(F ) value from Tbl O:select F nvl(F ) value from Tbl
字符串函数
求字符序号
S:select ascii( a ) value
O:select ascii( a ) value from dual
从序号求字符
S:select char( ) value
O:select chr( ) value from dual
连接
S:select + + value
O:select CONCAT( )|| value from dual
子串位置 返回 S:select CHARINDEX( s sdsq ) value O:select INSTR( sdsq s ) value from dual
模糊子串的位置 返回 参数去掉中间%则返回 // 本文转自 C++Builder 研究 ?i= &d=dwn rn S:select patindex( %d%q% sdsfasdqe ) value O:oracle没发现 但是instr可以通过第四个参数控制出现次数select INSTR( sdsfasdqe sd ) value from dual 返回
求子串S:select substring( abcd ) value O:select substr( abcd ) value from dual
子串代替 返回aijklmnef S:SELECT STUFF( abcdef ijklmn ) value O:SELECT Replace( abcdef bcd ijklmn ) value from dual
子串全部替换
S:Replace
O:select Translate( fasdbfasegas fa 我 ) value from dual
长度S:len datalength
O:length
大小写转换 lower upper
单词首字母大写
S:没发现
O:select INITCAP( abcd dsaf df ) value from dual
左补空格(LPAD的第一个参数为空格则同space函数)
S:select space( )+ abcd value
O:select LPAD( abcd ) value from dual
右补空格(RPAD的第一个参数为空格则同space函数)
S:select abcd +space( ) value
O:select RPAD( abcd ) value from dual
删除空格S:ltrim rtrim O:ltrim rtrim trim
重复字符串S:select REPLICATE( abcd ) value
O:没发现
发音相似性比较(这两个单词返回值一样 发音相同) S:SELECT SOUNDEX ( Smith ) SOUNDEX ( Smythe ) O:SELECT SOUNDEX ( Smith ) SOUNDEX ( Smythe ) from dual SQLServer中用SELECT DIFFERENCE( Smithers Smythers ) 比较soundex的差返回 为同音 最高
日期函数
系统时间
S:select getdate() value
O:select sysdate value from dual
前后几日
直接与整数相加减
求日期S:select convert(char( ) getdate() ) value
O:select trunc(sysdate) value from dual
select to_char(sysdate yyyy mm dd ) value from dual
求时间S:select convert(char( ) getdate() ) value O:select to_char(sysdate hh :mm:ss ) value from dual
取日期时间的其他部分
S:DATEPART和DATENAME函数(第一个参数决定)
O:to_char函数第二个参数决定
参数 下表需要补充
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 hh hh (hh hh S无效) minute mi n (n O无效) second ss s (s O无效)
millisecond ms (O无效)
当月最后一天
S:不知道
O:select LAST_DAY(sysdate) value from dual
本星期的某一天(比如星期日)
S:不知道
O:SELECT Next_day(sysdate ) vaule FROM DUAL;
字符串转时间
S:可以直接转或者select cast( as datetime) value
O:SELECT To_date( : : yyyy mm dd hh mi ss ) vaule FROM DUAL;
求两日期某一部分的差(比如秒)
S:select datediff(ss getdate() getdate()+ ) value O:直接用两个日期相减(比如d d = )
SELECT (d d )* * * vaule FROM DUAL;
根据差值求新的日期(比如分钟)
S:select dateadd(mi getdate()) value
O:SELECT sysdate+ / / vaule FROM DUAL;
求不同时区时间
S:不知道
O:SELECT New_time(sysdate ydt gmt ) vaule FROM DUAL;
时区参数 北京在东 区应该是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 (expressiοn + expressiοn)
把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
lishixinzhi/Article/program/Oracle/201311/16561