Armazenar TIME no SQL

1

Qual é a maneira correta de armazenar a HORA do dia no SQL?

Tenha um campo que se importe apenas quando uma ação ocorrer. Valores de exemplo serão 14:30 ou 14:30, não importa para mim qual. Este valor NUNCA (ha, ha) será adicionado, subtraído, comparado, etc. É simplesmente um atributo estático.

    
por csi 02.06.2011 / 19:35

2 respostas

4

Se você estiver usando o Microsoft SQL Server ou o MySQL (tenho certeza de que outros também suportarão isso, mas esses são os únicos que eu conheço), ambos contêm um tipo de dados dedicado para armazenar valores de tempo.

Eu sempre recomendo armazenar coisas como datas e horas em seus formatos dedicados ( DATE , TIME , DATETIME etc), porque se você precisar consultar os valores ou manipulá-los, isso fará com que o SQL seja escrito mais fácil porque o mecanismo de SQL está ciente de que tipo de dados está no campo. Se você armazenou datas ou horas em um VARCHAR , por exemplo, você pode ou não (dependente do mecanismo de banco de dados) ser capaz de escrever uma consulta que especificou SomeDateTimeField >= '2011-01-01 09:00:00' AND SomeDateTimeField <= '2011-01-01 17:00:00' sem vomitar, por exemplo.

Para referência, as informações do tipo de dados do SQL Server e do MySQL TIME estão aqui.

por 02.06.2011 / 19:48
2

Existem muitas opções - as três grandes são:

  1. Use um INTEGER armazenando valores Unix time_t (Segundos desde 01/01/1970)
    (Se você seguir esta rota, certifique-se de usar pelo menos um inteiro de 64 bits)

  2. Use os tipos Data e Hora do SQL
    ( TIME , DATETIME , TIMESTAMP , etc. - A lista de tipos disponíveis varia por servidor de BD)

  3. Use um campo chato de VARCHAR
    (Não faça isso. Seu "NUNCA" acima vai se transformar em "Bem, só desta vez ...")

A maneira mais "correta" é usar o campo Data & Tipos de tempos para sua implementação SQL - Isso geralmente permite usar comandos de formatação e comparação de datas.

Um segundo próximo seria valores integer / time_t, pois há funções bem definidas para converter & lidar com essa representação de uma data.

    
por 02.06.2011 / 19:58