primer obtener mes año anterior sql sql-server tsql sql-server-2008 datetime

obtener - ¿Cómo puedo seleccionar el primer día de un mes en SQL?



primer dia del mes anterior sql (21)

Solo necesito seleccionar el primer día del mes de una variable de fecha y hora determinada.

Sé que es bastante fácil hacerlo usando este tipo de código:

select CAST(CAST(YEAR(@mydate) AS VARCHAR(4)) + ''/'' + CAST(MONTH(@mydate) AS VARCHAR(2)) + ''/01'' AS DATETIME)

Pero esto no es muy elegante, y probablemente tampoco sea muy rápido.

Hay una mejor manera de hacer esto ? (Estoy usando SQL Server 2008)


Además de todas las respuestas anteriores, una forma basada en una función introducida en sql 2012

SELECT DATEFROMPARTS(YEAR(@mydate),MONTH(@mydate),1)


Aquí podemos usar la siguiente consulta para la primera fecha del mes y la última fecha del mes.

SELECT DATEADD(DAY,1,EOMONTH(Getdate(),-1)) as ''FD'',Cast(Getdate()-1 as Date) as ''LD''


Consulta simple:

SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0) -- Instead of GetDate you can put any date.


Esto funciona también:

SELECT DATEADD(DAY,(DATEPART(DAY,@mydate)-1)*(-1),@mydate) AS FirstOfMonth


Esto parece estúpidamente simple, pero funciona para mí:

select DATE_FORMAT(NOW(), ''%Y-%m-1'')


La conversión de una cadena (es decir, "5/1/2009") en datetime es ciertamente más legible, pero hace tiempo que encontramos un código que devolvería el primer día del mes ...

DECLARE @Date DATETIME //... SELECT DATEADD(mm, DATEDIFF(mm,0,@Date), 0)


Los futuros googlers, en MySQL, prueban esto:

select date_sub(ref_date, interval day(ref_date)-1 day) as day1;


Me gusta usar FORMAT , incluso puedes especificar un tiempo

SELECT FORMAT(@myDate,''yyyy-MM-01 06:00'') first_of_a_month


No para competir con ninguna de las grandes mentes aquí, sino una simple sugerencia ligeramente diferente a la respuesta aceptada anteriormente.

select dateadd(day, -(datepart(day,@date)+1,@date)


Personalmente recomendé el siguiente sql porque cuando intento usar la función de fecha en la cláusula de condición, es mucho más lenta la velocidad de mi consulta.

De todos modos siéntase libre de probar esto.

select CONCAT(DATEPART(YYYY,@mydate),''-'',DATEPART(MM,@mydate),''-01'')


Por favor use este

  1. Para el servidor 2012

    DATEFROMPARTS(year(''2015-06-30''),month(''2015-06-30''),1)

  2. Antes del servidor 2012

    select cast(cast(year(''2015-06-30'') as varchar(4))+''-''+ cast(month(''2015-06-30'') as varchar(2))+''-01'' as smalldatetime)


Probablemente es bastante rápido. ¿Por qué no crearlo como una función SQL?

CREATE FUNCTION [dbo].[GetFirstDayOfMonth] ( @InputDate DATETIME ) RETURNS DATETIME BEGIN RETURN CAST(CAST(YEAR(@InputDate) AS VARCHAR(4)) + ''/'' + CAST(MONTH(@InputDate) AS VARCHAR(2)) + ''/01'' AS DATETIME) END GO


SQL Server 2008:

SELECT DATEADD(DAY,1,EOMONTH(@mydate,-1))


Si está viendo esto hoy, y utilizando SQL Server 2012 o más reciente, tiene la función EOMONTH que facilita las cosas:

SELECT DATEADD(day, 1, EOMONTH(DATEADD(month, -1, GETDATE()))) as firstdateofmonth

Puede cambiar GETDATE () con la variable de fecha que desee.


Si utiliza SQL Server 2012 o superior;

SELECT DATEADD(MONTH, -1, DATEADD(DAY, 1, EOMONTH(GETDATE())))


Usé GETDATE () como una fecha para trabajar, puede reemplazarlo con la fecha que necesite.
Así es como funciona: Primero, formateamos la fecha en formato AAAAMMDD ... truncando para mantener solo los 6 caracteres que están más a la izquierda para mantener solo la parte AAAAMM, y luego agregamos ''01'' como mes, ¡y listo! Tienes el primer día del mes actual.

SELECT CAST(CONVERT(VARCHAR(6),GETDATE(),112) +''01'' AS DATETIME) AS StartOfMonth

Por cierto, el rendimiento es excelente en esto!


seleccione CONVERTIR (fecha, DATEADD (dd, - (DATEPART (dd, getdate ()) - 1), getdate ()), 120)

Esta función le proporcionará parte de la fecha de inicio del mes


DECLARE @startofmonth date SET @startofmonth = DATEADD(dd,1,EOMONTH(Getdate(),-2))

El -2 te llevará el primer día del mes pasado. es decir, getdate () es 10/15/18. Sus resultados serían el 9/1/18. Cambie a -1 y sus resultados serían el 1/10/18. 0 sería el inicio del próximo mes, 01/11/2018 .. etc. etc.

o

DECLARE @startofmonth date SET @startofmonth = DATEADD(dd,1,EOMONTH(@mydate,-1))


SELECT @myDate - DAY(@myDate) + 1


SELECT DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())

.................................................. ...................

Si no desea la hora, conviértala a la FECHA o si desea hacerla a las 0:00:00, conviértala a la FECHA y luego vuelva a la FECHA.

SELECT CONVERT (DATETIME, CONVERT (DATE, DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())))

Cambia GETDATE () a la fecha que quieras


SELECT DATEADD(month, DATEDIFF(month, 0, @mydate), 0) AS StartOfMonth