博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql Sever的存储过程转换为mysql的
阅读量:6190 次
发布时间:2019-06-21

本文共 2007 字,大约阅读时间需要 6 分钟。

总体来说,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)BEGINif(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)

 

DATEADD是MSSQL的内置函数;

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

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

 

8.关于表变量

MYsql中时不存在表变量这个概念的,但是却可以用临时表来代替,在Mysql中我们创业临时表一般用

CREATEtemporary
table tempTotal 
来进行创建,还有一点好处,就是临时变量在存储过程执行完会自动释放,不会占用大量内存;
9.MSSQL中会常常用到下面这个声明
DECLARE
VARCHAR (MAX);
但是在mysql中没有max这个概念,我一般会用varcahr8000)来替代,网上众说纷纭,说varchar最大值多少的都有,我没试验过,改写的时候慎用。
10.MSSQL中金融产品化会常常用到下面这个声明
DECLARE
VARCHAR (MAX);
但是在mysql中没有max这个概念,我一般会用varcahr8000)来替代,网上众说纷纭,说varchar最大值多少的都有,我没试验过,改写的时候慎用。
11. mysql中没有isnull函数,所以我们用ifnull来代替,用法一样;
以上就是我改写的过程中碰到的一些问题,希望对大家能有所帮助吧!

转载于:https://www.cnblogs.com/huxiaolin/p/4671039.html

你可能感兴趣的文章
登录功能验证处理
查看>>
hadoop无法停止
查看>>
Mcafee(麦咖啡) 无法升级的解决办法(威流验证)
查看>>
Java生成唯一GUID UUID
查看>>
mvc npoi将List<实体>导出excel的最简单方法
查看>>
DNS服务概念
查看>>
【CSS系列】获取实时数据做进度
查看>>
MySQL查询语句(select)详解(1)
查看>>
完全背包
查看>>
bzoj1627[Usaco2007 Dec]穿越泥地*
查看>>
Spring Cloud:Security OAuth2 自定义异常响应
查看>>
「SNOI2019」
查看>>
IOS警告消除<转>
查看>>
阻止保存要求重新创建表的更改
查看>>
一、Java语言基础(5)_数组高级——方法参数的值传递机制
查看>>
编程总结3
查看>>
基于 libevent 开源框架实现的 web 服务器
查看>>
vue部署问题
查看>>
C++实现Behavioral - Observer模式 (转)
查看>>
指上的寂寞
查看>>