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
Para el servidor 2012
DATEFROMPARTS(year(''2015-06-30''),month(''2015-06-30''),1)
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