MySQL使用存储过程:如何限制小数/只允许整数



我制作了一个名为forDailyUpdates的存储过程,例如,如果我输入('-1','Type1'(,它将抛出我在代码中设置的错误消息,如果没有,它将更新表。

我的问题是,是否也可以限制十进制输入?或者任何其他方法,如果它有点(.(这样的特殊字符,就会抛出错误消息。我仍然对任何建议持开放态度,谢谢!

我使用的是heidiSQL,它没有数字数据类型。更新:我尝试了许多其他函数,如truncate、substring、LIKE。SQL或HeidiSQL似乎不将(.(点作为特殊字符读取,因为它有自己的函数(它给出了一个建议列表,无论是数据库、表、关键字、函数等(

DROP PROCEDURE IF EXISTS `forDailyUpdates`;
DELIMITER $$
CREATE PROCEDURE `forDailyUpdates`(
IN `normaldays` INT,
IN `name` VARCHAR(50))
BEGIN
IF(normaldays < 0)
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Please input a number that is not negative.';
ELSE
IF(normaldays > 5 ) // this should not allow decimal, just a dummy on 5  
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Decimal';
ELSE
UPDATE months
SET
normal_days = normaldays
WHERE
active = TRUE and
is_task_type = TRUE and
task_name = name;
END IF;
END IF;
END$$
DELIMITER ;
CALL `forDailyUpdates`('-1','Acct 1');
DROP PROCEDURE IF EXISTS `forDailyUpdates`;

与其不允许使用小数,不如将其值四舍五入为整数:

CAST(圆形(正常天数,0(AS INT(

根据您的期望,您也可以使用FLOOR()CEIL()函数。

最新更新