Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL函数从字符串返回多个整数_Java_Mysql_Function_Stored Procedures - Fatal编程技术网

Java MySQL函数从字符串返回多个整数

Java MySQL函数从字符串返回多个整数,java,mysql,function,stored-procedures,Java,Mysql,Function,Stored Procedures,我想将来自Java方法的字符串“1,3,5,7,9,0,3”传递到函数中,并让函数将逗号分隔的每个值返回为Int,随后将在存储过程中使用(如下所示) 如何编写函数?在您的例子中,函数的输入是逗号分隔的字符串。但MySql不包含用于拆分逗号分隔字符串的内置函数(逗号只是分隔符的一个示例) 您提到的输入为“1,3,5,7,9,0,3”。也就是说,物品的数量是7。此计数必须是常量。我可以给你举个例子,但物品的数量应该始终保持不变 mysql函数也只能返回一个值。因此,您必须仅从函数内部调用该过程(在分

我想将来自Java方法的字符串“1,3,5,7,9,0,3”传递到函数中,并让函数将逗号分隔的每个值返回为Int,随后将在存储过程中使用(如下所示)


如何编写函数?

在您的例子中,函数的输入是逗号分隔的字符串。但MySql不包含用于拆分逗号分隔字符串的内置函数(逗号只是分隔符的一个示例)

您提到的输入为“1,3,5,7,9,0,3”。也就是说,物品的数量是7。此计数必须是常量。我可以给你举个例子,但物品的数量应该始终保持不变

mysql函数也只能返回一个值。因此,您必须仅从函数内部调用该过程(在分割值之后)

我假设输入字符串包含7项始终,并且使用的分隔符是逗号。否则,您必须修改该函数

DELIMITER @@

CREATE FUNCTION getCustomerFullName(commaSeparatedString VARCHAR(256))
RETURNS INT
BEGIN
  DECLARE value1 INT DEFAULT 0;
  DECLARE value2 INT DEFAULT 0;
  DECLARE value3 INT DEFAULT 0;
  DECLARE value4 INT DEFAULT 0;
  DECLARE value5 INT DEFAULT 0;
  DECLARE value6 INT DEFAULT 0;
  DECLARE value7 INT DEFAULT 0;

  IF NOT commaSeparatedString IS NULL
    THEN
          SELECT LENGTH(commaSeparatedString) - LENGTH(REPLACE(commaSeparatedString, ',', '')) INTO @commaCount;

          IF  @commaCount = 0
            THEN
                 RETURN 0;  
          ELSE
            SET value1 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 1),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 0)) + 1), ',', '');
            SET value2 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 2),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 1)) + 1), ',', '');
            SET value3 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 3),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 2)) + 1), ',', '');
            SET value4 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 4),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 3)) + 1), ',', '');
            SET value5 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 5),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 4)) + 1), ',', '');
            SET value6 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 6),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 5)) + 1), ',', '');
            SET value7 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 7),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 6)) + 1), ',', '');

        END IF;
  END IF; 

  CALL updateLastModifiedDate(value1, value2, value3, value4, value5, value6, value7);

  RETURN 1;
END;
@@

DELIMITER ;
礼节:


您的问题是什么?……我该如何编写函数?您好@Colin747,请告诉我这是否有帮助。感谢您的回答,如果项目的计数并非总是一个已知的数字,是否可以修改函数以适应?据我所知,项目的计数应该是恒定的。最让人头疼的是mysql中缺少内置的拆分函数。
DELIMITER @@

CREATE FUNCTION getCustomerFullName(commaSeparatedString VARCHAR(256))
RETURNS INT
BEGIN
  DECLARE value1 INT DEFAULT 0;
  DECLARE value2 INT DEFAULT 0;
  DECLARE value3 INT DEFAULT 0;
  DECLARE value4 INT DEFAULT 0;
  DECLARE value5 INT DEFAULT 0;
  DECLARE value6 INT DEFAULT 0;
  DECLARE value7 INT DEFAULT 0;

  IF NOT commaSeparatedString IS NULL
    THEN
          SELECT LENGTH(commaSeparatedString) - LENGTH(REPLACE(commaSeparatedString, ',', '')) INTO @commaCount;

          IF  @commaCount = 0
            THEN
                 RETURN 0;  
          ELSE
            SET value1 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 1),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 0)) + 1), ',', '');
            SET value2 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 2),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 1)) + 1), ',', '');
            SET value3 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 3),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 2)) + 1), ',', '');
            SET value4 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 4),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 3)) + 1), ',', '');
            SET value5 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 5),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 4)) + 1), ',', '');
            SET value6 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 6),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 5)) + 1), ',', '');
            SET value7 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 7),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 6)) + 1), ',', '');

        END IF;
  END IF; 

  CALL updateLastModifiedDate(value1, value2, value3, value4, value5, value6, value7);

  RETURN 1;
END;
@@

DELIMITER ;