Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用DECLARE和IF Else的MySQl查询导致错误_Mysql_Sql Server - Fatal编程技术网

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

使用DECLARE和IF Else的MySQl查询导致错误,mysql,sql-server,Mysql,Sql Server,我正在将mssql查询转换为MysQL,但我得到了一些错误,比如Declare不在正确的位置,或者它不在正确的位置。下面是我的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

我正在将mssql查询转换为MysQL,但我得到了一些错误,比如Declare不在正确的位置,或者它不在正确的位置。下面是我的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
声明v_StartDateIn varchar(25)默认值'@1'
声明v_EndDateIn varchar(25)默认值'@2'
如果(v_StartDateIn='')或(v_StartDateIn为空)或(v_StartDateIn='$1'),则设置v_StartDateIn=concat(左(日期格式(现在(),126),7),'-01T00:00:00');
如果结束;
如果(v_EndDateIn='')或(v_EndDateIn为空)或(v_EndDateIn='$2'),则设置v_EndDateIn=timestampadd(月,1,v_StartDateIn);
如果结束;
声明v_StartDate datetime(3)默认日期格式(v_StartDateIn,126);
声明v_EndDate datetime(3)默认日期格式(v_EndDateIn,126);
声明v_Limit varchar(20)默认“Limit”;
挑选
concat(左(日期格式(sl.StartStateDate,120),4)
,' ',
左(日期格式(sl.StartStateDate,107),3)
,' ',
子字符串(日期格式(sl.StartStateDate,120),9,2))作为日期
,左(格式(sl.StartStateDate,'D'),3)为天
,子字符串(日期格式(sl.StartStateDate,120),12,5)作为开始
,子字符串(日期格式(sl.EndStateDate,120),12,5)作为结束
从数据日志
其中1=1
和sl.StartStateDate>=v_StartDate
和sl.EndStateDate
有人能帮我在MySQL中如何使用上述查询吗。

  • 申报
您可以将其替换为会话变量:

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

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

是否会导致错误?什么错误?