Estoy buscando una función de SQL Server para devolver el valor mínimo para la fecha y hora, a saber, el 1 de enero de 1753. Prefiero no codificar ese valor de fecha en mi secuencia de comandos.
¿Existe algo así? (A modo de comparación, en C #, podría simplemente hacer ¿ DateTime.MinValue)
O tendría que escribir esto yo mismo?
Estoy usando Microsoft SQL Server 2008 Express.
sql-server
datetime
function
Jeremy
fuente
fuente
CONVERT(smalldatetime, 0)
parasmalldatetime
.Respuestas:
Podría escribir una función definida por el usuario que devuelva el valor de fecha mínima como este:
Luego use esa función en sus scripts, y si alguna vez necesita cambiarla, solo hay un lugar para hacerlo.
Alternativamente, puede usar esta consulta si lo prefiere para una mejor legibilidad:
Función de ejemplo
Uso
fuente
'1753-1-1'
es mucho mejor que-53690
cast('17530101' as datetime)
también evitará los problemas regionales y es un poco más legible que -53690.¿Ha visto el objeto SqlDateTime ? use
SqlDateTime.MinValue
para obtener su fecha mínima (1 de enero de 1753).fuente
Como no puedo comentar sobre la respuesta aceptada debido a puntos de reputación insuficientes, mi comentario llega como respuesta.
utilizando la
select cast('1753-1-1' as datetime)
se debe fallar si se ejecuta en una base de datos con configuraciones regionales que no aceptan una cadena de fecha con el formato AAAA-MM-DD.En su lugar, utilice
select cast(-53690 as datetime)
o aConvert
con el formato de fecha y hora especificado.fuente
Ingrese la fecha como un valor nativo
'yyyymmdd'
para evitar problemas regionales:Sí, sería genial si TSQL lo hubiera hecho
MinDate() = '00010101'
, pero no tuve tanta suerte.fuente
Aquí hay una forma rápida y altamente legible de obtener el valor de fecha mínima
Nota: Esta es una función determinista , por lo que para mejorar aún más el rendimiento, podríamos aplicar WITH SCHEMABINDING al valor de retorno.
Crea una función
Llamar a la función
Ejemplo 1
Ejemplo 2
Ejemplo 3
Ejemplo 4
Ejemplo 5
fuente
No es el 1 de enero de 1753, pero seleccione cast ('' como fecha y hora) que revela: 1900-01-01 00: 00: 00.000 da el valor predeterminado por el servidor SQL. (De todos modos, me parece más no inicializado)
fuente
SELECT CONVERT(DATETIME, 0)
) pero el valor mínimo real que la fecha y hora puede contener en SQL Server es en realidad en 1753 lo que escribió OP. Fue entonces cuando Estados Unidos también cambió al calendario gregoriano y SQL Server no tiene que lidiar con los días perdidos, etc.SELECT CONVERT(DATETIME, -53690)
da1753-01-01 00:00:00.000
ySELECT CONVERT(DATETIME, -53691)
da un error sobre un desbordamiento.Esto es lo que uso para obtener la fecha mínima en SQL Server. Tenga en cuenta que es compatible con la globalización:
Llamar usando:
fuente
El rango de
datetime
no cambiará, ya que eso rompería la compatibilidad con versiones anteriores. Para que pueda codificarlo de forma rígida.fuente
convert
hace, peroGetMinDate()
tendría que sumergirme en la definición de la función. Entonces, si tuviera que mantener su código, preferiría laconvert
variante.convert
hace, pero no necesariamente conocerá el significado de1753-1-1
.