我的学习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)
有什么想法吗?
答案 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;
答案 1 :(得分:3)
如果您使用整数类型(bigint
,integer
等)作为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)
干杯!