使用DECLARE和IF Else的MySQl查询导致错误

时间:2017-04-27 05:41:28

标签: mysql sql-server

我正在将mssql查询转换为MysQL,但是我得到的错误数量就像Declare不在正确的位置而IF ELSE它不在正确的位置。下面是我的SQL查询:

declare v_StartDateIn varchar(25) default '@1'
declare v_EndDateIn varchar(25)   default '@2'

IF (v_StartDateIn = '') OR (v_StartDateIn is null) OR (v_StartDateIn = '$1') THEN SET v_StartDateIn = concat(left(DATE_FORMAT (NOW(), 126),7),'-01T00:00:00');
END IF;

IF (v_EndDateIn = '') OR (v_EndDateIn is null) OR (v_EndDateIn = '$2') THEN SET v_EndDateIn  = timestampadd(Month,1,v_StartDateIn);
END IF;

declare v_StartDate datetime(3) default date_format(v_StartDateIn,126);
declare v_EndDate datetime(3) default date_format(v_EndDateIn,126);

declare v_Limit varchar(20) default 'Limit';

SELECT
 concat(left(date_format(sl.StartStateDate,120),4)
 ,' ',
 left(date_format(sl.StartStateDate,107),3)
 ,' ',
 substring(date_format(sl.StartStateDate,120),9,2)) as Date
,Left(format(sl.StartStateDate,'D'),3) as Day
,substring(date_format(sl.StartStateDate,120),12,5) as Start
,substring(date_format(sl.EndStateDate,120),12,5) as End

FROM DataLogs sl
WHERE 1=1
and sl.StartStateDate >= v_StartDate
and sl.EndStateDate   <  v_EndDate

有人可以帮我解决如何在MySQL中使用上述查询。

1 个答案:

答案 0 :(得分:0)

  • DECLARE

您可以使用会话变量替换它:

SET @v_StartDateIn = 'value';
  • IF-THEN-ENDIF

这是MySQL脚本的问题。所有这些(IF,CASE,LOOP ...)流控制语句都不能在脚本中使用。它们只能用于源对象[存储过程/函数,触发器,事件]。