zoukankan      html  css  js  c++  java
  • sql Sever的存储过程转换为mysql的

    总体来说,sql severMysql的存储过程的思路都是一样的,但是在语法和结构上还是有很大的区别的。
    1. mysql中写存储过程所有的dbo都要去掉。
    2每一个sql语句后面都需要加上;否则报错;
    4. 再说参数,在MSSQL中我们一般会这么定义参数

    CREATE PROCEDURE PROC_ST
    (@operator varchar(300),
    @ProcDate datetime,
    @ErrorLog varchar(8000) OUTPUT)

    但是在mysql中这种格式是不可以的;
    首先在mysql中输入参数是in来表示,输出参数是out表示,如果不写,默认是in,其次在mysql中是没有@符号的,所以所有的@符号都要去掉
    上述存储过程改写成mysql的话

    create PROCEDURE PROC_ST
    (
    in operator varchar(300),
    in ProcDate datetime, 
    out ErrorLog varchar(8000) 
    )

    5.关于时间的问题
    5.1 获取时间格式
    MSSQL中我们来获取时间一般用CONVERT来表示,例如

    set@YearMonth = CONVERT(varchar(6),@ProcDate,112);
    

    这句话的意思就是获取时间的年月并且格式是yyyymm的,112代表的是一种格式;

    但是在mysql中我修改的时候却一直报错,所以我换了一种写法

    year(now())*100+month(now())

    这样就可以了;
    5.2
    转换时间格式
    同样的,在MSSQL中用CONVERT(varchar(6),参数,112) = @YearMonth 就可以使用,但是在MYSQL中我用的是cast强制转换才可以

    CAST(
    REP.FACT_DATE 
    AS 
    CHAR(6) )
    

    6.

    关于if的使用
    MSSQL
    If()
    Begin
    程序片段
    End
    Else
    Begin
    程序片段
    End就可以;
    但是在Mysql中是不认的,if的后面必须有then,而且每一个else if的后面必须有;作为结束符号,否则不管你怎么调试也是过不去的
    下面的是我改写的一个函数,比较简单,主要是比较一下语法

    CREATE FUNCTIONLOAN_PERIOD
    (
    begindate int,
    
    enddate int
    )
    RETURNSvarchar(8000)
    BEGIN
    
    if(enddate-begindate <= '3')
    then 
    
    return '10';
    end if;
    
    if(enddate-begindate>'3' andenddate-begindate <= '6')
    then 
    
    return '20';
    
    end if;
    
    if(enddate-begindate>'6' andenddate-begindate <= '12') 
    
    then 
    
    return '30';
    
    end if;
    
    return '40';
    END

    7.关于在时间的增加或者减少
    我们一般在MSSQL中想得到日期的上一个月一般会这么写

    CONVERT (VARCHAR(6),DATEADD ("Month", -1, @ProcDate), 112)
    

    DATEADDMSSQL的内置函数;

    但是在mysql中是没有这个函数的,那我们应该怎么办呢,别着急,在mysql中有DATE_SUB函数,基本上也能满足我们的需求,上面这句话改写完成后

    CAST(DATE_SUB(ProcDate,INTERVAL1 MONTH) AS CHAR(6))
    

    8.关于表变量

    MYsql中时不存在表变量这个概念的,但是却可以用临时表来代替,在Mysql中我们创业临时表一般用
    CREATEtemporary
    table tempTotal 
    来进行创建,还有一点好处,就是临时变量在存储过程执行完会自动释放,不会占用大量内存;
    9.MSSQL中会常常用到下面这个声明
    DECLARE@temp
    VARCHAR (MAX);

    但是在mysql中没有max这个概念,我一般会用varcahr8000)来替代,网上众说纷纭,说varchar最大值多少的都有,我没试验过,改写的时候慎用。
    10.MSSQL中金融产品化会常常用到下面这个声明
    DECLARE@temp
    VARCHAR (MAX);

    但是在mysql中没有max这个概念,我一般会用varcahr8000)来替代,网上众说纷纭,说varchar最大值多少的都有,我没试验过,改写的时候慎用。
    11. mysql中没有isnull函数,所以我们用ifnull来代替,用法一样;
    以上就是我改写的过程中碰到的一些问题,希望对大家能有所帮助吧!

  • 相关阅读:
    函数的调用-转载
    HTML常用标签-手打抄录-来自-烟雨飘零-拜谢
    CSS常用标签-手打抄录-感谢原未知博主-拜谢了
    JS函数表达的几种写法
    JS数组---转及补充--
    标准文档流特性-不含块级元素和行内元素
    块级元素和行内元素-标签收集-区别之处
    CSS盒子知识
    把应用push到/system/app上面后,出现java.lang.UnsatisfiedLinkError的问题
    Vysor:在电脑里控制你的安卓手机
  • 原文地址:https://www.cnblogs.com/huxiaolin/p/4671039.html
Copyright © 2011-2022 走看看