Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta timestamp


shelter

Pergunta

Boa galera, e aí na boa?

Preciso muito da colaboração dos amigos.

Aqui tenho uma tabela com os seguintes campos.

Ramal ( DECIMAL ).

N_discado ( DECIMAL ).

Tronco ( DECIMAL ).

Duracao ( TIMESTAMP ).

Ramal N_discado Tronco Duracao

201 25165660 10 2005-06-05 00:00:22

Qual a pior missão que tenho hoje?

Preciso que as primeiros 00:00:30 segundos tenho o valor de R$ 0,50 e que a cada 6 segundos ele some R$ 0,10.

Vou dar um exemplo:

Uma ligação com duração de 00:00:22 igual a R$ 0,50.

Uma ligação com duração de 00:00:30 igual a R$ 0,50.

Uma ligação com duração de 00:00:42 igual a R$ 0,70.

Solicito a ajuda dos amigos, pois não estou sabendo nem como começar.

Vlw galera.

Abraços

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'shelter'!

Escrevi uma rotina que te possibilitará obter o resultado como umm campo calculado.

Ela funcionará em qualquer versão do MySQL igual ou superior a 5.0.x.

Deve ser implementada diretamente no banco.

DELIMITER $$;

DROP FUNCTION IF EXISTS `BancoDeDados`.`ValorApagar`$$

CREATE FUNCTION ` BancoDeDados `.`ValorApagar` (Campo Timestamp)
NO SQL RETURN double;
BEGIN
   declare Tempo Time;
   declare Seg integer;
   declare Valor double;

   Set Tempo = Time(campo);
   Set Seg = Hour(Tempo) * 3600;
   Set Seg = Seg + (Minute(Tempo) * 60);
   Set Seg = Seg + Second(Tempo)
   If Seg < = 30 then
      Set Valor = 0.50;
   Else
      Set Seg = Seg - 30;
      Set Valor = 0.50 + (0.10 * (Seg Div 6));
      If (Seg Mod 6) <> 0 then
         Set Valor = Valor + 0.10;
      End if;
   End if;
   ValorApagar = Valor;
END$$

DELIMITER;$$

Link para o comentário
Compartilhar em outros sites

  • 0

Não entedi como eu faria para agregrar esta função em uma conculta, pois tenho que exibir assim:

Ramal N_discado Tronco Duracao Valor

201 25165660 10 2005-06-05 00:00:22 0,50

205 25189610 15 2005-06-05 00:00:40 0,60

etc...

desculpa a minha ignorancia , pois não sei efetuar função no bd.

+ por favor me ajuda aí.

abraços e muito obrigado desde já

Link para o comentário
Compartilhar em outros sites

  • 0

'shelter',

No front end que você usa para manipular as tabelas no mysql,

coloque o texto da função dentro da área onde você digitaria um código SQL,

substitua o termo 'BancoDeDados' pelo nome de seu banco de dados e

execute o código.

Depois disso, para obter o que você mencionou, digite e execute a seguinte instrução sql:

SELECT Ramal, N_discado, Tronco, Duracao, ValorApagar(Duracao) AS Valor FROM  tabela

Link para o comentário
Compartilhar em outros sites

  • 0
Caro amigo denis agradeço a sua ajuda desde já , mais não estou conseguindo ( melhor sabendo ) efetuar esta função no banco ,haveria uma forma que não fosse com esta função .

ex.: um select . aí eu etenho + dominio.

obrigado

Obraços

Você carregou a função? Ela já faz parte do banco como expliquei no post #4?

Link para o comentário
Compartilhar em outros sites

  • 0
Então foi o que te falei ....não sei como?

Sou iniciante ..

Sou insistente.

Qualquer linguagem de programação poderia abrigar o código com as devidas alterações para a execução do mesmo. mas você tem uma ferramenta pederosa e gurdar esta função no banco de dados dará portabilidade a execução de suas consultas.

Então, se você não sabe, esta é uma boa ocasião para aprender.

Vamos ter um montão te posts até que você aprenda ou desista.

Primeiro responda qual o front end que você usa para manipular as tabelas do mysql? Programas Front End Mysql SqlYog é o meu preferido.

Link para o comentário
Compartilhar em outros sites

  • 0
Então denis,

eu utilizo o MYSQL Query Browser...

OK.

Entre no query browser,

selecione seu banco de dados;

Copie o texto que contém a função (publicado em um post acima) para a área onde você digita seus sqls

Substitua o texto BancoDeDados pelo nome de seu banco de dados nas linhas:

DROP FUNCTION IF EXISTS `BancoDeDados`.`ValorApagar`$$

CREATE FUNCTION ` BancoDeDados `.`ValorApagar` (Campo Timestamp)

Execute o código,

Pronto. sua função está no banco.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa amigo Denis,

Aqui não vou desistir, sei que não é a sua função mais pow me ajuda que vou me esforça para aprender , só preciso entender aqui:

Estou executando o código conforme me passou e estou recebendo o seguinte erro:

Script line: 4 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN

declare Tempo Time;

declare Seg integer;

declare Valor doubl' at line 2.

Não sei nem por onde começar , aqui me a uma ajuda para que eu me esforce para entender.

Segue o código e em vermelho coloco a duvida:

DELIMITER $$

DROP FUNCTION IF EXISTS `shelter`.`ValorApagar` $$

Aqui shelter seria o banco certo? Teste o nome da função ok?

CREATE FUNCTION `shelter`.`ValorApagar` (Campo Timestamp)

Aqui seria o pior (Campo Timestamp) , qual a minha duvida, escreve desta forma CAMPO TIMESTAMP porque? Onde declaro a tabela ... o nome do campo fiquei em perdido aqui , este aqui é o pior para mim.

BEGIN

declare Tempo Time;

declare Seg integer;

declare Valor double;

Set Tempo = Time(campo);

Set Seg = Hour(Tempo) * 3600;

Set Seg = Seg + (Minute(Tempo) * 60);

Set Seg = Seg + Second(Tempo)

If Seg < = 30 then

Set Valor = 0.50;

Else

Set Seg = Seg - 30;

Set Valor = 0.50 + (0.10 * (Seg Div 6));

If (Seg Mod 6) <> 0 then

Set Valor = Valor + 0.10;

End if;

End if;

ValorApagar = Valor;

END$$

DELIMITER ;

Você poderia comentar estes por favor e me ajudar neste erro .

Te agradeço muito, muito obrigado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oi,'shelter'!

Vamos comentar ponto a ponto toda a função. Para tal vou usar os caracteres /* para iniciar o comantário e os caracteres */ para finalizar o comantário:

DELIMITER $$; /*troca o delimitador (caractere que informa quando o comando acabou). Neste caso dentro da função vou usar o caracter ponto-e-virgula e fora da função vou usar os caracteres $$ para indicar que o comando acabou */

DROP FUNCTION IF EXISTS `BancoDeDados`.`ValorApagar`$$ /* Verifica se a função já existe e se já existir deleta ela. O termo BancoDeDados deve ser substituido pelo nome de seu banco de dados e o termo ValorApagar é o nome da função propriamente dito */

CREATE FUNCTION ` BancoDeDados `.`ValorApagar` (Campo Timestamp)
NO SQL RETURN double /* Favor retirar o ponto-e-virgula que estava aqui. Foi um erro meu. */
/* O comando acima cria a função ValorApagar no banco de dados indicado pelo nome BancoDeDados. Recebe como parâmetro uma variável, aqui denominada "Campo" que é do tipo Timestamp. A cláusula "NO SQL" Informa ao MySql que a função não executará internamente nenhum código SQL. A cláusula "RETURN double" informa so MySQL que a função retornará um valor do tipo double */
BEGIN /* Aqui se inicia a função */
   /*declare Tempo Time;*/ /* Declara uma variável de nome "Tempo" do tipo time */
/* A declaração acima estava provocando um erro insperado. Então retirei a variável da função, mas deixei comentada a declaração paraque sirva de instrução */
   declare Seg integer; 
   declare Valor double;

   /*Set Tempo = Time(campo); *//* Atribui a variavel "Tempo" o valor de retorno da função Time sobre o parâmetro "Campo" */
   Set Seg = Hour(campo) * 3600; 
   Set Seg = Seg + (Minute(campo) * 60);
   Set Seg = Seg + Second(campo)
   If Seg < = 30 then
      Set Valor = 0.50;
   Else
      Set Seg = Seg - 30;
      Set Valor = 0.50 + (0.10 * (Seg Div 6));
      If (Seg Mod 6) <> 0 then
         Set Valor = Valor + 0.10;
      End if;
   End if;
   ValorApagar = Valor; /* Informa ao MySQL que afunção está retornando o valor esperado */
END$$ /* Fim da Função */

DELIMITER;$$ /* Troca novamente o delimitador informando ao MySQL que ele volta a utilizar o ponto-e-virgula como finalizador de instrução */

No código acima estamos executando 4 comandos distintos de uma única vez. São eles:

o DELIMITER $$;

o DROP FUNCTION ...

o CREATE FUNCTION ... e

o DELIMITER;$$ novamente.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...