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