Mysql 此sql函数的正确版本是什么?

Mysql 此sql函数的正确版本是什么?,mysql,Mysql,生成新的id作为varchar的正确方法是什么?在这里,我试图将SQL Server转换为MySQL数据库 需要帮助 我试过上网,但没能解决我的问题 --*GENERATES ANY ID WHEN NEED* DELIMITER // CREATE FUNCTION getNewID(needTable VARCHAR(20)) RETURNS VARCHAR(10) BEGIN DECLARE lastvalue VARCHAR(10); DECLARE i INT;

生成新的
id
作为
varchar
的正确方法是什么?在这里,我试图将SQL Server转换为MySQL数据库

需要帮助

我试过上网,但没能解决我的问题

--*GENERATES ANY ID WHEN NEED*
DELIMITER //

CREATE FUNCTION getNewID(needTable VARCHAR(20)) RETURNS VARCHAR(10)
BEGIN
    DECLARE lastvalue VARCHAR(10);
    DECLARE i INT;
    DECLARE newId VARCHAR(10);

    IF needTable = 'Item'
            SELECT lastvalue = MAX(resourceID) FROM Item;

            SELECT MAX(resourceID) INTO lastvalue FROM Item;

            IF IS NULL(lastvalue)
                SET lastvalue = 'I00000000';
                SET i = RIGHT(lastvalue,9) + 1;
                SET newId = 'S' + RIGHT('00000000'+CONVERT(VARCHAR(10),i),9);

            RETURN newId;
END; //

DELIMITER ;

SELECT getNewID ('Item');

DROP FUNCTION getNewID
错误显示:

错误代码1064,SQL状态42000
您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解可在“从项中选择最大值(resourceID)到lastvalue”附近使用的正确语法

IF为空(第10行的lastval)
第3行第1列

0秒后执行完成,出现1个错误

试试这个

DELIMITER //

CREATE FUNCTION getNewID(needTable VARCHAR(20)) RETURNS VARCHAR(10)
BEGIN
    DECLARE lastvalue, newId VARCHAR(10);
    DECLARE i INT;

    SELECT MAX(resourceID) INTO lastvalue FROM Item where needTable = 'Item';

            IF(lastvalue IS NULL) THEN
                SET lastvalue = 'I00000000';
                SET i = RIGHT(lastvalue,9) + 1;
                SET newId = 'S' + RIGHT('00000000'+CONVERT(VARCHAR(10),i),9); -- what you are trying to do here?
                END IF;
-- what you need to return whenlastvalue is not null?
            RETURN newId;
END //

DELIMITER ;
试试这个

DELIMITER //

CREATE FUNCTION getNewID(needTable VARCHAR(20)) RETURNS VARCHAR(10)
BEGIN
    DECLARE lastvalue, newId VARCHAR(10);
    DECLARE i INT;

    SELECT MAX(resourceID) INTO lastvalue FROM Item where needTable = 'Item';

            IF(lastvalue IS NULL) THEN
                SET lastvalue = 'I00000000';
                SET i = RIGHT(lastvalue,9) + 1;
                SET newId = 'S' + RIGHT('00000000'+CONVERT(VARCHAR(10),i),9); -- what you are trying to do here?
                END IF;
-- what you need to return whenlastvalue is not null?
            RETURN newId;
END //

DELIMITER ;

选择lastvalue=MAX(资源ID)FROM Item;
不是有效的MySQL查询,只需对该行进行注释,因为下一行是MySQL的有效查询。更多的是关于函数内部的IF。该错误不是SQL Server;但我甚至不确定SQL是否是有效的MySQL。您在这里实际使用的是什么?我已经删除了两个标记,请仅重新标记您真正使用的RDBMS。谢谢s、
选择lastvalue=MAX(资源ID)FROM Item;
不是有效的MySQL查询,只需对该行进行注释,因为下一行是MySQL的有效查询。更多的是关于函数内部的IF。该错误不是SQL Server;但我甚至不确定SQL是否是有效的MySQL。您在这里实际使用的是什么?我已经删除了两个标记,请仅重新标记您真正使用的RDBMS。谢谢s、 此函数应将I000000001、I000000002作为项ID提供。Convert()是否将两种数据类型的concatation转换为varchar并返回newid只需检查mysql手册中的转换语法,当一个表到多个表出现时,我可以在SQLServer中返回各种id。我的意思是,如果我请求所需的表项,它会给我I000000001,如果我请求学生表,它会给我类似S000000001的id我将检查更多的if子句,这是参数needTable的用途。@Chanukafernand我知道您正在将SQL从sqlserver转换为MySQL,所以只需检查您需要的相关函数的MySQL文档,或者让我们知道答案满足您的查询?此函数应将I000000001、I000000002作为项ID。Convert()是否将两种数据类型的concatation转换为varchar并返回newid只需检查mysql手册中的转换语法,当一个表到多个表出现时,我可以在SQLServer中返回各种id。我的意思是,如果我请求所需的表项,它会给我I000000001,如果我请求学生表,它会给我类似S000000001的id我将检查更多的if子句,这是参数needTable的用途。@Chanukafernano我知道您正在将SQL从sqlserver转换为MySQL,所以只需检查您需要的相关函数的MySQL文档,或者让我们知道答案满足您的查询?