Estou procurando uma função do SQL Server para retornar o valor mínimo para data e hora, ou seja, 1º de janeiro de 1753. Prefiro não codificar esse valor de data em meu script.
Existe algo assim? (Para efeito de comparação, em C #, eu poderia apenas fazer DateTime.MinValue)
ou teria que escrever isso sozinho?
Estou usando o Microsoft SQL Server 2008 Express.
sql-server
datetime
function
Jeremy
fonte
fonte
CONVERT(smalldatetime, 0)
parasmalldatetime
.Respostas:
Você poderia escrever um função definida pelo usuário que retorna o valor mínimo da data como este:
Em seguida, use essa função em seus scripts e, se precisar alterá-la, só há um lugar para fazer isso.
Como alternativa, você pode usar esta consulta se preferir para melhor legibilidade:
Função de exemplo
Uso
fonte
'1753-1-1'
é muito melhor do que-53690
cast('17530101' as datetime)
também evitará os problemas regionais e é um pouco mais legível do que -53690.Você viu o objeto SqlDateTime ? use
SqlDateTime.MinValue
para obter sua data mínima (1 de janeiro de 1753).fonte
Como não posso comentar a resposta aceita devido a pontos de reputação insuficientes, meu comentário vem como uma resposta.
o uso de
select cast('1753-1-1' as datetime)
deve falhar se executado em um banco de dados com configurações regionais que não aceitam uma sequência de dados no formato AAAA-MM-DD.Em vez disso, use
select cast(-53690 as datetime)
ouConvert
com o formato de data e hora especificado.fonte
Insira a data como um valor nativo
'yyyymmdd'
para evitar problemas regionais:Sim, seria ótimo se o TSQL tivesse
MinDate() = '00010101'
, mas não teve essa sorte.fonte
Aqui está uma maneira rápida e altamente legível de obter o valor da data mínima
Observação: esta é uma função determinística , portanto, para melhorar ainda mais o desempenho, podemos também aplicar WITH SCHEMABINDING ao valor de retorno.
Crie uma função
Chame a função
Exemplo 1
Exemplo 2
Exemplo 3
Exemplo 4
Exemplo 5
fonte
Não é 1º de janeiro de 1753, mas selecione cast ('' como data e hora) que revela: 1900-01-01 00: 00: 00.000 dá o valor padrão pelo servidor SQL. (Parece mais não inicializado para mim de qualquer maneira)
fonte
SELECT CONVERT(DATETIME, 0)
), mas o valor mínimo real que a data e hora pode conter no SQL Server é na verdade em 1753 o que OP escreveu. Foi quando a América também mudou para o calendário gregoriano e o SQL Server não tem que lidar com dias perdidos etc.SELECT CONVERT(DATETIME, -53690)
dá1753-01-01 00:00:00.000
eSELECT CONVERT(DATETIME, -53691)
dá um erro sobre um estouro.É isso que eu uso para obter a data mínima no SQL Server. Observe que é favorável à globalização:
Ligue usando:
fonte
O intervalo de
datetime
não será alterado, pois isso interromperia a compatibilidade com versões anteriores. Então você pode codificá-lo.fonte
convert
faz, masGetMinDate()
teria que mergulhar na definição da função. Portanto, se eu tivesse que manter seu código, preferiria aconvert
variante.convert
significa, mas não necessariamente sabe o significado de1753-1-1
.