Necesito determinar la cantidad de días en un mes para una fecha determinada en SQL Server.
¿Hay una función incorporada? Si no es así, ¿qué debo usar como función definida por el usuario?
sql
sql-server
datetime
date
user-defined-functions
Incluso Mien
fuente
fuente
case when datediff(m, dateadd(day, 1-day(@date), @date), convert(date, convert(datetime, 2958463))) > 0 then datediff(day, dateadd(day, 1-day(@date), @date), dateadd(month, 1, dateadd(day, 1-day(@date), @date))) else 31 end
day
componente de laeomonth
salida.En SQL Server 2012, puede usar EOMONTH (Transact-SQL) para obtener el último día del mes y luego puede usar DAY (Transact-SQL) para obtener el número de días del mes.
fuente
La solución más elegante: funciona para cualquier @DATE
Tíralo en una función o simplemente úsalo en línea. Esto responde a la pregunta original sin toda la basura adicional en las otras respuestas.
ejemplos de fechas de otras respuestas:
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))
Devuelve 31SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))
Devoluciones 29SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))
Devuelve 31fuente
Mucho más simple ... prueba
day(eomonth(@Date))
fuente
Sin embargo, personalmente, haría un UDF para él si no hay una función incorporada ...
fuente
Yo sugeriría:
fuente
Este código le da la cantidad de días en el mes actual:
Cambie
getdate()
a la fecha para la que necesita contar los días.fuente
fuente
Solución 1: Encuentre la cantidad de días en cualquier mes en el que estemos actualmente
Solución 2: Encuentre la cantidad de días en una combinación de mes-año dada
fuente
Necesita agregar una función, pero es simple. Yo uso esto:
fuente
fuente
Agradable Simple y no requiere la creación de funciones Funciona bien
fuente
Necesita crear una función, pero es para su propia conveniencia. Funciona perfectamente y nunca encontré ningún cálculo defectuoso al usar esta función.
Cómo funciona: restar el número de día de la fecha de la fecha en sí le da el último día del mes anterior. Por lo tanto, debe agregar un mes a la fecha dada, restar el número de día y obtener el componente de día del resultado.
fuente
fuente
Yo voté a favor de Mehrdad, pero esto también funciona. :)
Probar
fuente
aqui hay otro más...
fuente
Sé que esta pregunta es antigua, pero pensé en compartir lo que estoy usando.
y
Esos podrían combinarse para crear una única función para recuperar la cantidad de días en un mes si es necesario.
fuente
Nice 'n' Simple y no requiere la creación de funciones
fuente
subdate
función.La respuesta de Mehrdad Afshari es la más precisa, aparte de lo habitual, esta respuesta se basa en un enfoque matemático formal dado por Curtis McEnroe en su blog https://cmcenroe.me/2014/12/05/days-in-month-formula.html
fuente
Para conseguir el no. de días en un mes podemos usar directamente Day () disponible en SQL.
Siga el enlace publicado al final de mi respuesta para SQL Server 2005/2008.
El siguiente ejemplo y el resultado son de SQL 2012
Resultado en SQL Server SSMS
Proceso:
Cuando se usa EOMONTH, cualquiera que sea el formato de fecha que usemos, se convierte al formato de fecha y hora del servidor SQL. Entonces, la salida de fecha de EOMONTH () será 2016-12-31 teniendo 2016 como año, 12 como mes y 31 como días. Esta salida cuando se pasa a Day () le da el recuento total de días en el mes.
Si queremos obtener el resultado instantáneo para verificar, podemos ejecutar directamente el siguiente código,
o
como referencia para trabajar en SQL Server 2005/2008/2012, siga el siguiente enlace externo ...
Encuentre el número de días en un mes en SQL
fuente
resultado: este mes 31
Próximo mes 30
fuente
fuente
fuente
Para cualquier fecha
fuente
fuente
consulta simple en SQLServer2012:
seleccionar día (('20-05-1951 22:00:00'))
Probé durante muchas fechas y siempre devuelve un resultado correcto
fuente
seleccione primer_día = dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), last_day = dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())) , dateadd (mm, 1, getdate ())), no_of_days = 1 + dateiff (dd, dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())), dateadd (mm, 1, getdate ())))
reemplace cualquier fecha con getdate para obtener el número de meses en esa fecha en particular
fuente
fuente