Mysql 向IN变量中添加值

Mysql 向IN变量中添加值,mysql,stored-procedures,Mysql,Stored Procedures,如果最初发送的值为零,我需要将2160000分配给fromDate 我现在拥有的代码是 CREATE PROCEDURE reportFreeCooling( IN fromDate VARCHAR (50), IN toDate VARCHAR (50), IN timeZone VARCHAR (50) ) BEGIN DECLARE startDate VARCHAR (50); DECLARE endDate VARCHAR (50); DECLARE s

如果最初发送的值为零,我需要将2160000分配给fromDate

我现在拥有的代码是

CREATE PROCEDURE reportFreeCooling(
  IN fromDate VARCHAR (50),
  IN toDate   VARCHAR (50),
  IN timeZone VARCHAR (50)
)
BEGIN
  DECLARE startDate VARCHAR (50);
  DECLARE endDate   VARCHAR (50);
  DECLARE startDateOriginal VARCHAR (50);
  DECLARE mylogID   INT;
  DECLARE myItemId varchar (50);
  DECLARE myItemId2 varchar (50);
  DECLARE xHours varchar (50);
  DECLARE endHoursNull varchar(50);
  DECLARE endHoursNotNull varchar (50);

当然还有存储过程的其余部分。其余的都是正确的,如果发送的是零,我只需要知道如何更改fromDate。

我没有测试过这些,但它们可能会为您指明正确的方向

选项1:使用字符串比较比较fromDate

选项2:将fromDate从varchar转换为int

DECLARE fromDateInt INT;

SELECT CONVERT(fromDate as SIGNED) INTO fromDateInt;
IF fromDate = 0 THEN 
   SET @fromDate = '21600000'; 
...

此外,您可能需要检查/处理: 1.fromDate可以是浮动吗?

2.fromDate可以为空吗?

这段代码实际上需要一个;在set语句和if语句的末尾

IF firstRowDate > startDateOriginal THEN SET startDateOriginal = firstRowDate; END IF;

使用局部变量存储所需的值,如果给定0,则为2160000。。。为什么要使用varchars?使用varchars是因为应用程序的处理方式-如果我使用时间戳或日期,那么它会给出一个奇怪的结果-相信我,我已经尝试过了!。。。我试过把IF fromDate=0然后fromDate=2160000放在上面,但这让我大吃一惊!我不确定我需要设置什么我尝试过如果fromDate=0然后设置@fromDate='2160000';但无法添加IF!=0然后fromDate,那么我遗漏了什么基本上这就是我需要编写代码来完成的。。。。。如果fromDate=0,则设置#fromDate='2160000';如果fromDate>0,则设置#fromDate=fromDate;设置startDate=FROM#UNIXTIME(#fromDate/1000)。。。。。。但这当然行不通#上面代码中的date=@fromDate,因为stackflow认为每次我使用“at”符号时,我都在向用户寻址。我尝试了如果fromDate=“0”,然后设置#fromDate='2160000';否则设置#fromDate=fromDate-END如果;它给了我一个错误,说有一个;预期在结束之前,我还尝试了如果fromDate=“0”,则设置#fromDate='2160000';否则,如果fromDate>0,则设置#fromDate=fromDate END IF;它给了我同样的错误…不,我不想将它转换为int,并且no fromDate不能为null或float-我编辑为在“如果结束”之后包含“;”。这是你的问题吗?不,我试着添加一个;如果结束-如果结束;给我一个错误。。。。它说它期待着一场灾难;但我知道这是错误的
IF firstRowDate > startDateOriginal THEN SET startDateOriginal = firstRowDate; END IF;