Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Impossível armazenar determinados formatos de data e hora no SQL Server


SQL Server não armazena um DateTime em qualquer formato de string - é armazenado como um valor numérico de 8 bytes.

As várias configurações (idioma, formato de data) apenas influenciam como o DateTime é mostrado a você no SQL Server Management Studio - ou como ele é analisado quando você tenta converter uma string em um DateTime .

Há muitos formatos suportados pelo SQL Server - consulte os MSDN Books Online on CAST e CONVERTER . A maioria desses formatos é dependente em quais configurações você tem - portanto, essas configurações podem funcionar algumas vezes - e às vezes não.

A maneira de resolver isso é usar o formato de data ISO-8601 que é suportado pelo SQL Server - este formato funciona sempre - independentemente do idioma do SQL Server e das configurações de formato de data.

O formato ISO-8601 é suportado pelo SQL Server vem em dois tipos:
  • YYYYMMDD apenas para datas (sem parte do tempo) - observe aqui:sem traços! , isso é muito importante! YYYY-MM-DD é NÃO independente das configurações de formato de data em seu SQL Server e NÃO trabalhe em todas as situações!

ou:
  • YYYY-MM-DDTHH:MM:SS para datas e horas - observe aqui:este formato tem traços.

Isso é válido para o SQL Server 2000 e mais recente.

Se você usa o SQL Server 2008 e o DATE tipo de dados (somente DATE - não DATETIME !), então você também pode usar o YYYY-MM-DD formato e isso também funcionará com qualquer configuração em seu SQL Server.

Não me pergunte por que todo esse tópico é tão complicado e um tanto confuso - é assim que é. Mas com o YYYYMMDD formato, você deve estar bem para qualquer versão do SQL Server e para qualquer configuração de idioma e formato de data em seu SQL Server.