关于SQLServer与MYSQL的存储过程

        SQL Server与MYSQL是用的比较多的两款关系型数据库了,最近在写存储过程的时候,总是把这两款数据库的函数,导致存储过程写的特别难受。就拿我想写的查询一年中每月的统计举例子。

        在定义变量时,SQLServer与MYSQL的格式是有一点差异的,SQLServer在定义的变量前要加@,而MYSQL中加了@反而会报错。

MYSQL:
    DECLARE s_t datetime;
	DECLARE e_t datetime;

SQL Server:
    DECLARE @s_t datetime;
	DECLARE @e_t datetime;

        因为我想传入的时间只有时间的年份,比如2021,那想把它当成时间进行时间的计算。那可能会有字符串的拼接,时间的加减。其中字符串拼接,在SQL Server中我可以直接使用+号进行字符串的拼接;而MYSQL中需使用concat的函数,如果使用"+",他就会进行数值计算。

MYSQL:
    set s_t = CONCAT(s_date,'-01-01');
	set e_t = CONCAT(e_date,'-12-01');

SQLServer:
    set @s_t = @s_date+ '-01-01';
	set @e_t = @e_date+ '-12-01';

        之后就是关于循环和时间计算了,while循环的差别还是有点明显的:MYSQL中while是以end While进行结尾 while * do开头的;而SQLServer中,是以while * begin开始,end结束。在时间计算中,MYSQL中DATE_ADD函数与SQLServer中的DATEADD差别基本就属于参数差异了。

MYSQL:
    WHILE s_t <= e_t DO
        #do something

        SET s_t = DATE_ADD(s_t,INTERVAL 1 MONTH);
	END WHILE;

SQLServer:
    WHILE @s_t <= @e_t
	BEGIN
        --do something

        SET @s_t = DATEADD(MONTH, 1, @s_t);
	END

        以上就可以搭起一个框架了。给定时间区间,查询区间内每月的数据量进行一个数据分析,这样可以避免在业务层去进行一个数据的计算查询了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenyx_shang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值