Help,
Preciso cria uma função na verdade em Cache, mas nem estou conseguindo fazer no Mysql.
peço ajuda de para poder criar no MYSQL e se alguém souber no Banco de dados Cache ficarei muito grato pelas dicas.
Problema tem se uma String strSplit="30;60;90"; deseja se fazer a soma desses valores através de funções SQL não disponho de outros recursos.
Vou colocar ela em Java, os scripts de SQL para MYSQL que tenho.
Código se fosse em Java//Metodo em Java
/**
* @param: String com dados dessa forma strSplit="30;60;90";
* @param: String com dados separador sp=";";
* */
public double somaSplit(String strSplit, String sp)
{
strSplit="30;60;90"; // só para exemplificar.
String split[]= strSplit.split(sp);
Integer soma=0;
int i=1;
for(String str : split)
{
soma+=Integer.parseInt(str);
i++;
}
if(soma % i!=0)
{
return soma/i+1;
}
return soma/i;
}
// criando a tabela para teste
create table testeFuncao(
stringSplit varchar(100)
)
//Inserindo os dados na tabela
insert into testeFuncao (stringSplit) values ('30;60;90;120'),('10;20;30;40'),('30;60;'),('60;90;'),('30;60;90;120');
//função em MYSQL que estou fazendo..
DELIMITER $$
DROP FUNCTION IF EXISTS `baseparatestes`.`somaString` $$
CREATE FUNCTION `baseparatestes`.`somaString` (strSplit VARCHAR(100), strDelimitador VARCHAR(5) ) RETURNS INT
BEGIN
DECLARE qtdeDelimitadores, i, tamanhoSplit, tamanhoDelimitador INT;
DECLARE caracter VARCHAR;
DECLARE soma DOUBLE;
SET soma=0;
SET i=0;
IF ISNULL(strSplit) THEN RETURN i; END IF;
IF ISNULL(strDelimitador) THEN RETURN i; END IF;
SET tamanhoSplit = CHAR_LENGTH( strSplit );
SET tamanhoDelimitador = CHAR_LENGTH( strDelimitador );
IF (tamanhoSplit = 0 OR tamanhoDelimitador = 0) THEN RETURN 0; END IF;
FOR(i; i < tamanhoSplit; i++ )
{
SET caracter =strSplit[i];
IF caracter = strDelimitador THEN qtdeDelimitadores++; END IF
}
SET i=0;
FOR(i=0; i< qtdeDelimitadores; i++)
{
varchar valor = SUBSTRING(SUBSTRING_INDEX(strSplit, strDelimitador, i), LENGTH(SUBSTRING_INDEX(strSplit, strDelimitador, i)) + 1);
soma += cast (valor as double);
}
IF soma % qtdeDelimitadores != 0 THEN RETURN CAST (soma / qtdeDelimitadores AS INT)+1; END IF;
RETURN CAST (soma / qtdeDelimitadores AS INT);
END $$
DELIMITER ;
SET soma=0;
SET i=0;
IF ISNU' at line 4
Alguém pode me ajudar!