Formatando datas no SQL e no C#

Muitas vezes é necessário exibir datas em um determinado formato no GridView. Muitos programadores convertem a data para o formato desejado já na consulta SQL ou procedure. Isso não está correto por uma série de motivos, entre os quais podemos citar:

1) A responsabilidade de formatar a data deve ser totalmente da view, ou seja, da camada de apresentação.
2) Datas formatadas pelo SQL não são mais datas, são varchars, e não podem ser ordenados como datas.
3) Trazendo sempre a data integral do banco de dados pode-se fazer qualquer operação desejada com ela.

Veja o link abaixo para tirar qualquer dúvida que você possa ter a respeito.
http://weblogs.sqlteam.com/jeffs/archive/2007/04/13/format-date-sql-server.aspx

Dito isso, algumas considerações interessantes:

Para formatar strings diretamente em uma GridView adicione a coluna (bound column) e defina um valor para a propriedade DataFormatString:


<asp:BoundField DataField="Data" DataFormatString="{0:dd/MM/yyyy}" HeaderText="Data" />
<asp:BoundField DataField="Hora" DataFormatString="{0:HH:mm:ss}" HeaderText="Hora" />

dd - Dia com dois dígitos
MM - Mês com dois dígitos, deve ser maiúsculo
yyyy - Ano com quatro dígitos

hh - Hora no formato de 12 horas (necessário AM e PM)
HH - Hora no formato de 24 horas
mm - Minuto
ss - Segundo

Função para extrair a data de um datetime, com hora 0:00:00


CREATE  function [dbo].[sudf_Common_DateOnly]
(
@dtDateTime DateTime
)
returns datetime
as
begin
    return dateadd(dd, 0, datediff(dd, 0, @dtDateTime))
end

Função para extrair a hora de um datetime, com data 01/01/1900


CREATE function [dbo].[sudf_Common_TimeOnly]
(
      @dtDateTime datetime
)
returns datetime
as
begin
    return dateadd(day, -datediff(day, 0, @dtDateTime), @dtDateTime)
end
Fonte:
http://www.lazerwire.com/2011/10/ms-sql-date-only.html
http://www.lazerwire.com/2011/10/ms-sql-time-from-datetime.html

Melhor fonte de informação sobre esses formatos:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring.aspx

Funções para lidar com datas:
http://msdn.microsoft.com/en-us/library/aa258863(v=sql.80).aspx

Conversão de datas com Convert no SQL Server:
http://www.sql-server-helper.com/tips/date-formats.aspx


Have fun ;)

Comentários

Postagens mais visitadas deste blog

Detectar o encoding de um arquivo para não corromper ao transformá-lo

erro "ora-12154: tns: não foi possível resolver o identificador de conexão especificado"

Quebras de linha no Delphi 2010