Oracle 开发常见问题

 1.数学函数
①绝对值 
l  S:select abs(-1) value
l  O:select abs(-1) value from dual
②取整(大) 
l  S:select ceiling(-001) value 
l  O:select ceil(-001)   value from dual
③取整(小) 
l  S:select floor(-001) value   
l  O:select floor(-001) value from dual
④取整(截取)
l  S:select cast(-002 as int)   value  
l  O:select trunc(-002) value from dual 
⑤四舍五入
l  S:select round(23456,4) value     23460
l  O:select round(23456,4) value from dual 2346
⑥e为底的幂 
l  S:select Exp(1) value          l  O:select Exp(1) value from dual  
⑦取e为底的对数
l  S:select log(7182818284590451) value      
l  O:select ln(7182818284590451) value from dual;  
⑧取10为底对数
l  S:select log10(10) value         
l  O:select log(10,10) value from dual;   
⑨取平方
l  S:select SQUARE(4) value   
l  O:select power(4,2) value from dual  
⑩取平方根 l  S:select SQRT(4) value   
l  O:select SQRT(4) value from dual  
求任意数为底的幂
l  S:select power(3,4) value      
l  O:select power(3,4) value from dual  
取随机数
l  S:select rand() value  
l  O:select sys.dbms_random.value(0,1) value from dual;
取符号
l  S:select sign(-8) value    -1
l  O:select sign(-8) value from dual  -1
2.数值比较
①求集合最大值 l  S:select max(value) value from 
    (select 1 value union
    select -2 value union
    select 4 value union
    select 3 value)a
l  O:select greatest(1,-2,4,3) value from dual
②求集合最小值
l  S:select min(value) value from      (select 1 value union
    select -2 value union
    select 4 value union
    select 3 value)a
l  O:select least(1,-2,4,3) value from dual
③如何处理null值(F2字段中的null以 10 代替)
l  S:select F1,IsNull(F2,10) value from Tbl
l  O:select F1,nvl(F2,10) value from Tbl 3.字符串函数
①求字符序号
l  S:select ascii('a') value
l  O:select ascii('a') value from dual
②从序号求字符
l  S:select char(97) value
l  O:select chr(97) value from dual
③连接
l  S:select '11'+'22'+'33' value
l  O:select CONCAT('11','22')||33 value from dual
④子串位置——返回3 l  S:select CHARINDEX('s','sdsq',2) value 
l  O:select INSTR('sdsq','s',2) value from dual
⑤模糊子串的位置——返回2,参数去掉中间%则返回7
l  S:select patindex('%d%q%','sdsfasdqe') value 
l  O:oracle没发现,但是instr 可以通过第四个参数控制出现次数
    select INSTR('sdsfasdqe','sd',1,2) value from dual  返回 6
⑥求子串
l  S:select substring('abcd',2,2) value 
l  O:select substr('abcd',2,2) value   from dual
⑦子串代替——返回aijklmnef l 

S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
l  O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value   from dual

l  S:select space(10)+'abcd' value
l  O:select LPAD('abcd',14) value from dual
⑨右补空格(RPAD 的第1个参数为空格则同 space函数)
l  S:select 'abcd'+space(10) value
l  O:select RPAD('abcd',14) value from dual
⑩发音相似性比较(这 2个单词返回值一样,发音相同)
l  S:select soundex ('Smith'), soundex ('Smythe')
l  O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
SQL  Server 中用 SELECT  DIFFERENCE('Smithers',  'Smythers')  比较 soundex 的差返回
0~4,4为同音,1最高

4.日期函数
①系统时间
l  S:select getdate() value
l  O:select sysdate value    from dual
②求日期
l  S:select   convert(char(10),getdate(),20) value
l  O:select trunc(sysdate) value    from dual
select to_char(sysdate,'yyyy-mm-dd') value    from dual
③求时间
l  S:select   convert(char(8),getdate(),108) value
l  O:select to_char(sysdate,'hh24:mm:ss') value    from dual
④当月最后一天

l  S:不知道
l  O:select LAST_DAY(sysdate) value   from dual
⑤本星期的某一天(比如星期日)
l  S:不知道
l  O:SELECT Next_day(sysdate,7) vaule FROM DUAL;
⑥字符串转时间
l  S:select   cast('2004-09-08'as datetime) value
l  O: SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;
⑦求2日期某一部分的差(比如秒)

l  S:select   datediff(ss,getdate(),getdate()+3) value

l  O:直接用两个日期相减(比如d1-d2=3)
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
⑧根据差值求新的日期(比如分钟)
l  S:select   dateadd(mi,8,getdate()) value
l  O:SELECT sysdate+8/60/24 vaule FROM DUAL;

Oracle和 SQL Server 的语句区别

1.Oracle如何实现自增列
如果你一直都是用SQL Server 作为开发数据库的,而新的项目需要使用Oracle数据库,
那么你会突然发现SQL Server 和Oracle还是有着很大的差别的。首先,我在SQL Server 中
用得很顺手的自增长字段就在Oracle中找不到了,取而代之,Oracle可以用序列来实现。示
例如下。
(1)建立测试数据表。
CREATE  TABLE  TEST
(
 ID NUMBER,
 NAME VARCHAR2(20),
 PRIMARY  KEY(ID)
);

(2)创建序列。
CREATE  SEQUENCE  SEQ_TEST;
(3)创建触发器。
CREATE  OR  REPLACE  TRIGGER  AUTOINCREMENT
BEFORE  INSERT  ON  TEST
FOR  EACH  ROW
WHEN  (NEW.ID  IS  NULL)
BEGIN
SELECT  SEQ_TEST.NEXTVAL  INTO  :NEW.ID  FROM  DUAL;
END;

(4)插入数据。
INSERT  INTO  TEST(NAME)  VALUES('NAME1');
(5)查看插入结果。
SELECT  *  FROM  TEST;
2.Parameter 的区别
在 SQL  Server 中我们可以按以下方式使用 SQL 语句:"Insert  into  Table  (Field1,field2)
lues(@Value1,@Value2)", 然后我们再new 几个Paramter: new SqlParameter("@Value1",value)...

在查询字符串中使用@+字符来描述参数,在 SqlParameter 中的参数名也要使用“@”
符号。而在Oracle中SQL语句不能使用@符号,以冒号“:”代替,如:
--Sql Server的Sql 语句
insert into Table (Column1,Column2) values (@Value1,@Value2) 
 
--Oracel中的Sql 语句
 Insert Into Table (Column1,Column2) values  (:Value1,:Value2)
3.存储过程的不同
Oracle中的存储过程叫做包(Packages) ,一个包分为包头和包体,类似于 C++中的类声
明。 包头定义了存储过程的名称和参数, 包体除了名称和参数,还包括存储过程的所有语句。
与SQL  Server 不同,在Oracle中存储过程一般写成Function,而不是 Procedure。Oracle存
储过程并不直接返回记录集,记录集以游标的形式通过参数返回。一个包(Packages)可以
包含多个存储过程,使用存储过程时采用“包名.存储过程名”的方式,下面是一个典型的
Oracle存储过程,它位于名称为“Test”的包(Packages)中,它的使用方式应为 Test.GetList。 

Function GetList(keywords In varchar2,p_info_list_Cursor out get_data_cur_type)
   Return Number 
As 
Begin
       open p_info_list_Cursor For 
       Select * from Test where Key=keywords
;
       Return 0;
End;
⑧左补空格(LPAD 的第1个参数为空格则同 space函数)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值