`

mysql语法与decode语法的不同

 
阅读更多

这两天要把一个系统从oracle上移植到mysql上,顺便简单整理一下两者语法的不同

 

  1. decode

mysql中没有decode,可以使用case when语句代替,oracle也支持case when语句,看来以后为了移植方便还是使用case when比较好。

select NAME,
 case name
        when 'sam' then 'yong'
        when 'lee' then 'handsome'
        else 'good' end
from lee;

 

下面是同一条sql,decode与case when比较:

 

 

 sum(decode(sign(similarity-${param1})+sign(similarity-${param2}),0,1,-1,1,0)) as sus_tort_count
 sum(case sign(similarity-${param1})+sign(similarity-${param2}) when 0 then 1   when -1 then 1 else 0 End 

 

2.分页代码:

oracle中分页代码使用rownum,具体参见:http://qingfeng825.iteye.com/blog/779462

----oracle排序写法   
SELECT * FROM (    
SELECT list.*, rownum as RNUM FROM (    
SELECT *   FROM CIP_Test_User                                                      
ORDER BY ID desc )    
list WHERE ROWNUM <   11 ) WHERE RNUM >=1   

 

1和11都代表行号

mysql分页使用limit

----mysql排序写法    
SELECT *   FROM CIP_Test_User                                                      
ORDER BY ID desc
limit 1,10  
 

 

1代表偏移量,10代表要取出来的记录个数

3.数字转字符串

     mysql:  concat(site_id,'')

     oracle:to_char(site_id)

 

4.取当前日期(mysql 要加括号)

    mysql:now(),sysdate() 具体参见:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html

    oracle:sysdate

5.触发器的不同,下面是两个相同功能的触发器

CREATE TRIGGER `IMS_EVIDENCE_UPDATE_TRIGGER` BEFORE UPDATE ON `bas_page_evidence`
  FOR EACH ROW
BEGIN
if ((NEW.WEB_IMAGE IS NOT NULL AND OLD.WEB_IMAGE IS NULL)
OR(NEW.WEB_URL_IMAGE IS NOT NULL AND OLD.WEB_URL_IMAGE IS NULL)
OR(NEW.HTML_SNAP IS NOT NULL AND OLD.HTML_SNAP IS NULL)) then
   set new.Evidence_Done_Count=new.Evidence_Done_Count+1;
   if(new.EVIDENCE_DONE_COUNT>=new.EVIDENCE_COUNT) then
      set new.Evidence_date=sysdate();
      if(new.EVIDENCE_STATUS!='4' and old.EVIDENCE_STATUS!='4') then
            set new.Evidence_status = '3';
      end if;
      update bas_monitor_result set status='5' where status='4' and url_Id=new.url_id;
   end if;
end if;
END;

 (mysql版本)

 

CREATE OR REPLACE TRIGGER IMS_EVIDENCE_UPDATE_TRIGGER
before UPDATE OF Web_image,Web_url_image,Html_snap
ON ims_page_evidence
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
WHEN ((new.Web_image is not null and old.Web_image is null)
or(new.Web_url_image is not null and old.Web_url_image is null)
or(new.Html_snap is not null and old.Html_snap is null))
BEGIN
    :new.Evidence_Done_Count := :old.Evidence_Done_Count+1;
    if :old.Evidence_Done_Count+1 >= :old.Evidence_Count then
        :new.Evidence_date := sysdate;
        if :old.Evidence_status !='4' and :new.Evidence_status !='4' then
            :new.Evidence_status := '3';
        end if;
        --更新result
        update ims_monitor_result set status='5' where status='4' and url_Id=:new.url_id;
    end if;
END;

(oracle版本) 

 

 几点不同: mysql没有replace trigger, 要修改一个trigger只能是drop trigger后重新建;

                 oracle在before update  与 on  表名之间可以加入 of 列名1,列名2,列表3,表示当前trigger只对这几列有用,在mysql中没有找到这种写法。

                 oracle中用到new old都要加: ,mysql不用。

分享到:
评论

相关推荐

    mysql仿oracle的decode效果查询

    本文将详细介绍如何在MySQL中模拟Oracle的`DECODE`函数,并探讨不同数据库系统中的查询差异。 首先,Oracle的`DECODE`函数可以理解为一个简单的条件判断表达式,它允许我们在一个查询中根据指定的条件返回不同的列...

    mysql与oracle差异总结

    在 MySql 中,创建函数的语法与 Oracle 不同。MySql 使用 DELIMITER 语句来标记函数的开始和结束,而 Oracle 使用 CREATE FUNCTION 语句。在 MySql 中,同时还需要指定函数的定义者和字符集。 2. 变量声明 在 ...

    DECODE解码代码

    DECODE函数提供了一种简洁的语法,使得在SQL查询中可以根据不同的条件返回不同的值,而无需使用复杂的CASE语句或者IF-THEN-ELSE逻辑。 DECODE函数的基本语法如下: ```sql DECODE(expression, value1, result1, ...

    浅析Mysql Join语法以及性能优化

    7. **使用DECODE或CASE语句**:在某些情况下,通过减少计算,这些语句可以帮助优化JOIN操作。 理解JOIN的语法和性能优化技巧对于编写高效的SQL查询至关重要。在设计数据库和编写查询时,应始终考虑性能,尤其是在...

    php基本语法学习笔记

    另外,PHP与MySQL数据库的整合是其强项之一。使用`mysqli`或`PDO`扩展,我们可以连接到数据库,执行查询,并处理结果集。例如,连接到数据库的代码可能如下: ```php $servername = "localhost"; $username = ...

    Oracle与Mysql差异说明.doc

    3. DECODE 和 CASE WHEN:Oracle 的 DECODE 函数在条件判断中提供简洁的语法,但在 MySQL 中,你需要使用 CASE WHEN THEN END 结构来实现相同功能。 4. TO_DATE 和 STR_TO_DATE:Oracle 的 TO_DATE 函数将字符串...

    使用Decode运算符.rar

    在数据库查询和编程中,`Decode` 运算符是一种非常实用的工具,它用于根据指定的条件返回不同的值。这个运算符在某些数据库系统,如Oracle和SQL Server中广泛使用,尤其在处理条件判断和简化查询逻辑时。在本教程中...

    php语法大全(超全超详细)

    10. **数据库交互**: PHP可以与多种数据库进行交互,如MySQL通过`mysqli`或`PDO`扩展。例如: ```php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // 创建连接...

    mysql 函数大全

    `DECODE`的基本语法如下: ```sql DECODE(expression, value1, result1, value2, result2, ..., default_result) ``` 这里的`expression`是要检查的值,`value1`、`value2`等是你希望匹配的值,`result1`、`result...

    [数据库] MySQL基础知识之日期判断及添加排序序号1

    在Oracle中,DECODE函数可以用来处理分母为0的情况,但在MySQL中没有直接的DECODE函数。不过,我们可以使用CASE WHEN语句来实现相同功能。 例如,要计算"数学/英语"的比例,但避免除以0的错误,可以这样写: ```...

    Oracle到mysql转换的问题总结要点.doc

    - `DECODE`函数:Oracle的`DECODE`在MySQL中可以用`CASE WHEN`语句替代。 - 序列化函数:Oracle的`ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...)`在MySQL中需使用用户变量模拟,如示例所示。 - 行号`ROWNUM`...

    Oracle到mysql转换的问题总结.docx

    Oracle到MySQL转换的过程中,会遇到一系列与数据类型、SQL语法和函数使用相关的问题。以下是这些关键点的详细解释: 1. **数据类型的区别**: - Oracle中的`NUMBER(10,0)`等同于MySQL中的`INT`,而`NUMBER(10,2)`...

    access和sql语法区别详细

    Access 的转换方法与 SQL Server 的 `Convert` 或 `Cast` 不同,Oracle 使用 `To_Char` 和 `To_Number`。使用 `GetConvertStr` 可以实现转换。 9. **日期字符串格式**: Access 的日期格式如 `'2004-10-9'` 和 `#...

    Oracle到mysql转换的问题总结.doc

    - `DECODE`函数:Oracle中的`DECODE`在MySQL中可以用`CASE WHEN`表达式替换。 - 分区窗口函数:Oracle的`ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...)`在MySQL中需通过用户变量实现,如示例所示。 6. 其他...

Global site tag (gtag.js) - Google Analytics