semestre - Función SQL Server para devolver la fecha mínima(1 de enero de 1753)
obtener mes y año de una fecha sql (8)
Estoy buscando una función de SQL Server para devolver el valor mínimo para datetime, es decir, el 1 de enero de 1753. Prefiero no codificar ese valor de fecha en mi script.
¿Existe algo así? (Por comparación, en C #, podría hacer DateTime.MinValue)
O tendría que escribir esto yo mismo?
Estoy usando Microsoft SQL Server 2008 Express.
¿Has visto el objeto SqlDateTime ? use SqlDateTime.MinValue
para obtener su fecha mínima (1 de enero de 1753).
Aquí hay una forma rápida y altamente legible de obtener el valor mínimo de la fecha
Crear una función
CREATE FUNCTION MinDate()
RETURNS DATETIME
AS
BEGIN
RETURN CONVERT(DATETIME, -53690)
END
Llamar a la función
dbo.MinDate()
Ejemplo 1
PRINT dbo.MinDate()
Ejemplo 2
PRINT ''The minimimum date allowed in an SQL database is '' + CONVERT(VARCHAR(MAX), dbo.MinDate())
Ejemplo 3
SELECT * FROM Table WHERE DateValue > dbo.MinDate()
Ejemplo 4
SELECT dbo.MinDate() AS MinDate
Ejemplo 5
DECLARE @MinDate AS DATETIME = dbo.MinDate()
SELECT @MinDate AS MinDate
Como no puedo comentar sobre la respuesta aceptada debido a insufficeint puntos de reputación, mi comentario es una respuesta.
el uso del select cast(''1753-1-1'' as datetime)
se realizará select cast(''1753-1-1'' as datetime)
si se ejecuta en una base de datos con configuraciones regionales que no aceptan una cadena de fechas del formato AAAA-MM-DD.
En su lugar, use el select cast(-53690 as datetime)
o un Convert
con el formato de fecha y hora especificado.
El rango de datetime
y datetime
no cambiará, ya que eso rompería la compatibilidad con versiones anteriores. Entonces puedes codificarlo.
Esto es lo que uso para obtener la fecha mínima en SQL Server. Tenga en cuenta que es amigable con la globalización:
CREATE FUNCTION [dbo].[DateTimeMinValue]()
RETURNS datetime
AS
BEGIN
RETURN (SELECT
CAST(''17530101'' AS datetime))
END
Llamar usando:
SELECT [dbo].[DateTimeMinValue]()
Ingrese la fecha como un valor nativo ''yyyymmdd''
para evitar problemas regionales:
select cast(''17530101'' as datetime)
Sí, sería genial si TSQL tuviera MinDate() = ''00010101''
, pero no tuvo tanta suerte.
No es el 1 de enero de 1753, pero selecciona el reparto ('''' como fecha y hora) que revela: 1900-01-01 00: 00: 00.000 da el valor predeterminado por el servidor SQL. (Parece más no inicializado de todos modos)
Podría escribir una Función definida por el usuario que devuelva el valor mínimo de la fecha así:
select cast(-53690 as datetime)
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:
select cast(''1753-1-1'' as datetime)
Función de ejemplo
create function dbo.DateTimeMinValue()
returns datetime as
begin
return (select cast(-53690 as datetime))
end
Uso
select dbo.DateTimeMinValue() as DateTimeMinValue
DateTimeMinValue
-----------------------
1753-01-01 00:00:00.000