Mysql 向IN变量中添加值
如果最初发送的值为零,我需要将2160000分配给fromDate 我现在拥有的代码是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
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;