PplWare Mobile

Vamos dar uns toques de SQL? VI

                                    
                                

Este artigo tem mais de um ano


Autor: Pedro Pinto


  1. Acompanho o pplware à bastante tempo, mas apenas como leitor. Contudo como a minha área de trabalho atual é o Mysql, achei que também podia dar uma dica nesta secção.

    Já que falamos em datas um problema que me deparo muitas vezes é calcular a idade correta, não apenas por subtração de anos, e deixo aqui o mysql que utilizo para isso:

    SELECT DATE_FORMAT(NOW(), ‘%Y’) – DATE_FORMAT(‘1974-08-17’, ‘%Y’) – (DATE_FORMAT(NOW(), ’00-%m-%d’) < DATE_FORMAT('1974-08-17', '00-%m-%d')) AS idade;

    sendo que 17-8-1974 é a data de nascimento do indivíduo que queremos saber quantos anos tem agora (Now()).

    Continuem que esta dedicação,

  2. Pedro says:

    Duas coisas:

    Now() não é reconhecido em SQL,apenas em MySQL. Para obter a data actual no SQL usa-se

    select getdate() -> 2011-07-02 18:21:29.623

    Para formatar temos duas hipóteses em SQL, cast e convert

    select cast(getdate() as varchar(10)) – >Jul 2 201

    select convert(varchar(50), getdate(),105) -> 02-07-2011

    105 é o formato dd/mm/yyyy, mais formatos aqui:http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx

    • Pedro Gaspar says:

      Desconhecia, como trabalho praticamente so com MySQL, ha umas coisitas que mudam de umas BD para outras 🙂

    • @Pedro:
      Duas correções:

      O standard ANSI é “CURRENT_TIMESTAMP”. É implementada por TODOS os SGBDs que conheço (de cor, ocorrem-me o Oracle, PostgreSQL, DB2, além do próprio MS SQL).

      A função “getdate()” é que parece ser específica do MS SQL, “herdada” do Sybase, no qual é baseado.

      Quanto à formatação de datas, fico feliz por não ter recorrer a coisas tão esotéricas como “formata esta data com o padrão 105” e poder usar o date_format.

  3. Rafael Cardoso says:

    Tendo em conta que a base de dados é da pplware, falta um ‘l’ na base de dados definida embora que o código se encontre correcto 🙂

  4. Luís Santos says:

    Está muito bom este artigo.
    Os meus Parabéns Pedro Pinto.

  5. lmx says:

    Boas..
    com vista a uma compatiblidade nas querys, sugeria o uso quase que em absoluto da norma SQL92…
    Bom trabalho 😉

    cmps

  6. Bruno Rebelo says:

    Calcular a idade com base no Dia /Mes /Ano:

    SELECT year(getdate()) – year(@BirthDate)-
    case
    when month(getdate()) < month(@BirthDate) then 1
    when month(getdate()) = month(@BirthDate) and day(getdate()) < day(@BirthDate) then 1
    else 0
    end

  7. Helder says:

    Pedro,

    Ao que me parece estão-se aqui a confundir duas coisas. O artigo tem por titulo falar de SQL e o que tu fazes em muitas situações é falar em MySQL.

    São coisas diferentes. Acho que em futuros artigos deverias dar primeiramente os exemplos em ANSI-SQL e só depois apresentá-los nas diversas variantes que existem (Mysql, T-SQL, etc…)

    De resto, excelente ideia esta.

    Cumps

  8. Trambulhao says:

    Parabéns..

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.