Fórum Achar a quantidade de repetições de um determinado caracter numa string... #450970

05/08/2013

0

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

Responder

Posts

07/08/2013

Wesley Yamazack

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
Responder

Gostei + 0

07/08/2013

Wesley Yamazack

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
Responder

Gostei + 0

07/08/2013

Lindolfo Junior

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...
Responder

Gostei + 0

07/08/2013

Lindolfo Junior

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
Responder

Gostei + 0

07/08/2013

Wesley Yamazack

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.
Responder

Gostei + 0

07/08/2013

Lindolfo Junior

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...
Responder

Gostei + 0

20/08/2013

Lindolfo Junior

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
Responder

Gostei + 0

27/08/2013

Lindolfo Junior

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

VLW
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar