2017-04-27 65 views
-1

我正在将mssql查询转换为Mysql,但是我得到的错误数量比如Declare不在正确的位置,如果ELSE它不在正确的位置。下面是我的SQL查询:带DECLARE和IF的MySQl查询导致错误

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中使用上述查询。

+0

导致错误?什么错误? –

回答

0
  • DECLARE

您可以用会话变量替代它:

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

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