MySql过程IF编号为奇数或偶数

时间:2014-12-11 20:00:27

标签: mysql if-statement procedure

我的学习mysql和我的问题是检查我在这里做错了什么:

我试图制作一个sql程序来检查用户输入的第一个数字奇数还是甚至但我在&#39 ;;'

附近的第9行收到语法错误

这是sql:

MYSQL>
DELIMITER //

CREATE PROCEDURE num()
BEGIN
IF (SELECT LEFT(num,1))=1 OR (SELECT LEFT(num,1))=3 OR (SELECT LEFT(num,1))=5 OR (SELECT LEFT(num,1))=7 THEN
SELECT 'number is odd';
ELSEIF (SELECT LEFT(num,1))=2 OR (SELECT LEFT(num,1))=4 OR (SELECT LEFT(num,1))=6 OR (SELECT LEFT(num,1))=8 THEN
SELECT 'number is even'; 
END IF;

END;//

以下是测试编号的CALL:

MYSQL> CALL num(3123123123) 

有什么想法吗?

4 个答案:

答案 0 :(得分:6)

你想要做的是计算。 %2将给出除数的余数2.如果该余数不为0则为奇数

SELECT IF(LEFT(num, 1) % 2 <> 0, "number is odd", "number is even")

您还希望将此过程修复为此类

DELIMITER //
CREATE PROCEDURE `num`( IN input_num int, OUT output varchar(200))
    BEGIN
        SELECT IF(LEFT(input_num, 1) % 2 <> 0, "number is odd", "number is even") INTO output;
    END//
你会这样称呼它。

set @a = '';
call num(333, @a);

select @a;

demo fiddle

答案 1 :(得分:3)

如果您使用整数类型(bigintinteger等)作为i,您应该可以使用

  • 奇数:(i & 0x1) =&gt; 1
  • 偶:(i & 0x1) =&gt; 0

完整陈述:

UPDATE `test` SET `d` = IF ( ( `i` & 0x1 ) = 1, 'Odd', 'Even' );

答案 2 :(得分:1)

也许你是在一个函数之后而不是一个过程,因为我没有看到它如何从表中返回多行......

http://sqlfiddle.com/#!2/5090b1/4/0

MySQL stored procedure vs function, which would I use when? 在这里阅读何时使用其中一个...

CREATE Function num(I_Num int)
 Returns char(4) deterministic
 RETURN case when mod(left(I_NUM,1),2)=1 then 'Odd' Else 'Even' END;


select num(123) odd, num(234) even;

答案 3 :(得分:1)

自 MySQL 4.X 起,MOD() 函数已包含在 MySQL 中。如果您将有理数计算为偶数或奇数,则可以使用 MOD 函数。

见:https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_mod

MOD(x, y) 函数返回 X 除以 Y 的余数。

我们可以简单地使用这个函数来确定一个值是偶数还是奇数,方法是将要计算的数字作为 X 和 2 作为 Y。

考虑以下示例,其中我们使用 MOD() 对 X 值 8800 和 8801 以及 3 评估奇数或偶数:


/* Example 1: X=8800, Y=2 */

SELECT MOD(8800, 2);

-- Returns 0 (remainder == 0, so our number is EVEN)

/* Example 2: X=8801, Y=2 */

SELECT MOD(8801, 2);

-- Returns 1 (remainder > 0, so our number is ODD)

/* Example 3: X=3, Y=2 */

SELECT MOD(3, 2);

-- Returns 1 (remainder > 0, so our number is ODD)

如果您喜欢稍微不同的返回值,您可以稍微扩展一下,并结合 IF/ELSE 流控制修饰符函数 IF()。

见:https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_if

IF(expr1, expr2, expr3) 有 3 个参数。 IF() 计算 expr1,如果 expr1 计算为 TRUE,则返回 expr2。否则,将返回 expr3(有一些注意事项,请参阅上面的 MySQL 文档以获取更多详细信息)。

考虑以下示例,我们再次使用 MOD() 对 X 值 8800 和 8801 评估奇数或偶数:


/* Example 1: X=8800, Y=2 */

SELECT IF(MOD(8800, 2)>0,'ODD','EVEN');

-- Returns 'EVEN' (remainder == 0, so our number is EVEN)

/* Example 2: X=8801, Y=2 */

SELECT IF(MOD(8801, 2)>0,'ODD','EVEN');

-- Returns 'ODD' (remainder > 0, so our number is ODD)

干杯!