Achar a quantidade de repetições de um determinado caracter numa string...

MySQL

05/08/2013

Boa tarde a todos!!

estou com o seguinte problema, recebo em uma determinada tabela uma string da seguinte forma : 12-45-34-23-66 assim por diante, eu preciso saber criar uma trigger que insira em outra tabela cada valor separado, tipo:

chega assim :
12-45-34-23-66
depois que a trigger dispara vai para outra tabela assim:
12
45
34
23
66
alguém pode me dar uma ajuda... obrigado
Lindolfo Junior

Lindolfo Junior

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

05/08/2013

Opa, dúvida bem interessante..

Curiosidade, você poderia fazer isso pela sua linguagem de programação de forma mais fácil. Ou tem que ser realmente pelo bd mesmo?

abs
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

05/08/2013

Opa, acabou que acho que resolvi.. veja se te ajuda...

usando este código para separar a tua string, de acordo com o teu delimitador, no caso ele é o '-', tua string é o campo

CREATE PROCEDURE explode( pDelim VARCHAR(32), pStr TEXT)
BEGIN
  DROP TABLE IF EXISTS temp_explode;
  CREATE TEMPORARY TABLE temp_explode (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, word VARCHAR(40));
  SET @sql := CONCAT('INSERT INTO temp_explode (word) VALUES (', REPLACE(QUOTE(pStr), pDelim, '\'), (\''), ')');
  PREPARE myStmt FROM @sql;
  EXECUTE myStmt;


Dai pra vc testar e ver funcionando seria assim:
SET @str  = "The quick brown fox jumped over the lazy dog";
 SET @delim = " ";

CALL explode(@delim,@str);
SELECT id,word FROM temp_explode;



atenção, cada linha com ';', deve ser executada individualmente.

Um abraço
GOSTEI 0
Lindolfo Junior

Lindolfo Junior

05/08/2013

Opa, acabou que acho que resolvi.. veja se te ajuda...

usando este código para separar a tua string, de acordo com o teu delimitador, no caso ele é o '-', tua string é o campo

CREATE PROCEDURE explode( pDelim VARCHAR(32), pStr TEXT)
BEGIN
  DROP TABLE IF EXISTS temp_explode;
  CREATE TEMPORARY TABLE temp_explode (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, word VARCHAR(40));
  SET @sql := CONCAT('INSERT INTO temp_explode (word) VALUES (', REPLACE(QUOTE(pStr), pDelim, '\'), (\''), ')');
  PREPARE myStmt FROM @sql;
  EXECUTE myStmt;


Dai pra vc testar e ver funcionando seria assim:
SET @str  = "The quick brown fox jumped over the lazy dog";
 SET @delim = " ";

CALL explode(@delim,@str);
SELECT id,word FROM temp_explode;



atenção, cada linha com ';', deve ser executada individualmente.

Um abraço


Yamazack, primeiramente muito obrigado pela ajuda, com relação ao seu primeiro post, tem que ser diretamente no banco e tb ser executado automaticamente, por isso tinha pensado numa trigger, agora com relação ao segundo post, não estou conseguindo rodar a procedure, está dando erro de sintaxe...
GOSTEI 0
Lindolfo Junior

Lindolfo Junior

05/08/2013

Yamazack, ja consegui rodar a procedure, deu tudo certo, e funcionou como eu queria, só mais uma coisa, tenho como incluir nessa procedure, a quantidade de linhas que foram inseridas?? porque eu faço uma média da inserção.. outra coisa, posso mandar inserir diretamente na minha tabela ao invés dessa temporária, né???

obrigado
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

05/08/2013

Opa Lindolfo, que bom que funcionou meu querido! Mt bom!

Bom, já pra essa outra tua dúvida, acho que você teria que dar um SELECT * FROM e ver a quantidade de registros.

Quanto a incluir em sua tabela, sem dúvidas!!!! Faça isso, pois você terá os registros guardados.

Dica, para fazer o teu select acima, salva a datahora, ou algum código para criar tipo uma 'chave primária'.

SELECT COUNT(*) FROM TB
WHERE CHAVE = 'XXXX'


Veja se assim te resolve, forte abraço e até mais.
GOSTEI 0
Lindolfo Junior

Lindolfo Junior

05/08/2013

Opa Lindolfo, que bom que funcionou meu querido! Mt bom!

Bom, já pra essa outra tua dúvida, acho que você teria que dar um SELECT * FROM e ver a quantidade de registros.

Quanto a incluir em sua tabela, sem dúvidas!!!! Faça isso, pois você terá os registros guardados.

Dica, para fazer o teu select acima, salva a datahora, ou algum código para criar tipo uma 'chave primária'.

SELECT COUNT(*) FROM TB
WHERE CHAVE = 'XXXX'


Veja se assim te resolve, forte abraço e até mais.


Então, é que na verdade esse valor eu preciso antes de inserir na tabela, pois vou fazer um calculo antes da inserção, por isso que teria que saber a quantidade antes...

vlw e muito obrigado por enquanto...
GOSTEI 0
Lindolfo Junior

Lindolfo Junior

05/08/2013

Pessoal, estou voltando com o mesmo tópico pois ainda não consegui solucionar o meu problema, o yamazack deu uma força grande mas ainda não consegui finalizar. Vou explicar melhor, o meu vendedor faz uma venda num aplicativo de celular e envia para o meu banco de dados, muito bem, esse registro chega pra mim com vários códigos e um valor total. Separar os vários códigos foi a ajuda que o Yamazack me deu, porém, preciso saber quantos códigos são e dividir o valor total da venda pra eu inserir na tabela cada item. Ex:

1234-1235-1236-1237,200.00,2013.08.20,.......

quero inserir na tabela assim:
1234,50.00,2013.08.20,......
1235,50.00,2013.08.20,......
1236,50.00,2013.08.20,......
1237,50.00,2013.08.20,......

espero ter sido claro... desde já, obrigado pela ajuda
GOSTEI 0
Lindolfo Junior

Lindolfo Junior

05/08/2013

alguém por favor pode me ajudar, tenho uma certa urgência em solucionar esse problema...

VLW
GOSTEI 0
POSTAR