Trabalhando com Datas no Sqlite

Muitas pessoas têm dúvida na hora de trabalhar com datas no sqlite, o que é aceitável já que sqlite não tem um tipo data que possa ser especificado para um campo, como date ou datetime, por exemplo, o que nos resta então é usar os tipos nativos do sqlite para armazenar e manipular as datas, ou seja, podemos usar:

TEXT para armazenar uma string com o valor da data, exemplo “2013-03-03 21:21:00”, dessa forma podemos ordenar os valores de acordo com o campo data sem problemas.

Repare que no trecho do código abaixo o campo datahora e ultima são criados com o tipo TEXT.

CREATE TABLE IF NOT EXISTS conta
             (codigo INTEGER PRIMARY KEY AUTOINCREMENT, 
             datahora TEXT, 
             ultima TEXT, 
             descricao TEXT, 
             status_excluido INTEGER DEFAULT 0)'

O próximo trecho de código mostra como gravar o DATETIME atual do sistema usando uma das funções de manipulação de datas do Sqlite:

INSERT INTO conta(datahora, descricao) values(datetime('now'),'Exemplo de texto');

Existem ainda duas outras formas recomendas de trabalhar com datas no Sqlite, que são:

– Usar um campo do tipo REAL e armazenar as datas no formato Juliano.

– Por último, usar um campo do tipo INTEGER para armazenar um valor UNIX TIME, por exemplo.

Os dois últimos tem a vantagem de permitirem comparações entre datas, subtração ou adição, de forma mais simples e direta.

Abaixo alguns links de referência que podem ser bastante úteis na manipulação de datas com Sqlite:

Lista de funções para manipulação de datas
http://www.sqlite.org/lang_datefunc.html

Documentação sobre Datas e outros tipos no Sqlite
http://www.sqlite.org/datatype3.html

3 comentários em “Trabalhando com Datas no Sqlite”

  1. Ola Emidio tudo bem?
    Me deparei com essa dificuldade tb, só que penssei em usar TEXT para armazenar no banco de dados.
    Só que ao ler :
    “- Usar um campo do tipo REAL e armazenar as datas no formato Juliano.

    – Por último, usar um campo do tipo INTEGER para armazenar um valor UNIX TIME, por exemplo.
    Os dois últimos tem a vantagem de permitirem comparações entre datas, subtração ou adição, de forma mais simples e direta.”

    Eu não entendi direito pq o tipo INTEGER/REAL serias mais facil para fazer comparaçoes, enfim manipulaçoes.
    Sera se poderia me explicar ou mesmo me dar um exemplo?

    Obrigada

    1. Olá Nádia, tudo bom?
      Basicamente acontece que quando você usa numeral a comparação fica mais fácil do que num campo text, por exemplo. O problema mesmo é que o sqlite não tem um tipo date, eu tenho usando o campo na forma de TEXT e tem me atendido muito bem, principalmente com ordenação. Lembrando que estou usando sqlite para android, ainda não sei em outra plataforma.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Enter Captcha Here : *

Reload Image