Fórum Achar a quantidade de repetições de um determinado caracter numa string... #450970
05/08/2013
0
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
Curtir tópico
+ 0Posts
07/08/2013
Wesley Yamazack
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
07/08/2013
Wesley Yamazack
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
07/08/2013
Lindolfo Junior
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
07/08/2013
Lindolfo Junior
obrigado
Gostei + 0
07/08/2013
Wesley Yamazack
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
07/08/2013
Lindolfo Junior
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
20/08/2013
Lindolfo Junior
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
27/08/2013
Lindolfo Junior
VLW
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)