En mi tabla tengo un mes (tinyint) y un campo de día (tinyint). Me gustaría tener una función que tome este mes y día y produzca un horario para la próxima fecha (incluido el año) dado este mes y día.
Así que si tuviera Month = 9, Day = 7 produciría el 9/7/2009.
Si tuviera el Mes 1, Día 1 produciría 1/1/2010.SQL: Cómo producir la fecha siguiente dado mes y día
Respuesta
algo como esto iba a funcionar. Es una variación de su método, pero no usa el formato literal MM/DD/YYYY, y no explotará contra malas entradas (para bien o para mal).
declare @month tinyint
declare @day tinyint
set @month = 9
set @day = 1
declare @date datetime
-- this could be inlined if desired
set @date = convert(char(4),year(getdate()))+'0101'
set @date = dateadd(month,@month-1,@date)
set @date = dateadd(day,@day-1,@date)
if @date <= getdate()-1
set @date = dateadd(year,1,@date)
select @date
Como alternativa, para crear una cadena en formato AAAAMMDD:
set @date =
right('0000'+convert(char(4),year(getdate())),4)
+ right('00'+convert(char(2),@month),2)
+ right('00'+convert(char(2),@day),2)
Otro método, que evita literales todos juntos:
declare @month tinyint
declare @day tinyint
set @month = 6
set @day = 24
declare @date datetime
declare @today datetime
-- get todays date, stripping out the hours and minutes
-- and save the value for later
set @date = floor(convert(float,getdate()))
set @today = @date
-- add the appropriate number of months and days
set @date = dateadd(month,@month-month(@date),@date)
set @date = dateadd(day,@day-day(@date),@date)
-- increment year by 1 if necessary
if @date < @today set @date = dateadd(year,1,@date)
select @date
Aquí está mi ejemplo sql hasta ahora. Realmente no me gusta, aunque ...
DECLARE @month tinyint,
@day tinyint,
@date datetime
SET @month = 1
SET @day = 1
-- SET DATE TO DATE WITH CURRENT YEAR
SET @date = CONVERT(datetime, CONVERT(varchar,@month) + '/' + CONVERT(varchar,@day) + '/' + CONVERT(varchar,YEAR(GETDATE())))
-- IF DATE IS BEFORE TODAY, ADD ANOTHER YEAR
IF (DATEDIFF(DAY, GETDATE(), @date) < 0)
BEGIN
SET @date = DATEADD(YEAR, 1, @date)
END
SELECT @date
No utilice el formato MM/DD/YYYY para los literales de fecha. Use AAAAMMDD en su lugar. Evitará problemas de localización y se ordena adecuadamente. –
De lo contrario, no veo ningún problema con su método. ¿No le gusta la conversión de un literal? –
Parece algo que debería ser una solución fácil. –
he aquí una solución con PostgreSQL
your_date_calculated = Year * 10000 + Month * 100 + Day
le da una fecha como 20090623.
select cast(cast(your_date_calculated as varchar) as date) + 1
aquí está mi versión. El núcleo de la misma está a sólo dos líneas, usando la función DATEADD
, y no se requiere ninguna conversión a/de cuerdas, flotadores o cualquier otra cosa:
DECLARE @Month TINYINT
DECLARE @Day TINYINT
SET @Month = 9
SET @Day = 7
DECLARE @Result DATETIME
SET @Result =
DATEADD(month, ((YEAR(GETDATE()) - 1900) * 12) + @Month - 1, @Day - 1)
IF (@Result < GETDATE())
SET @Result = DATEADD(year, 1, @Result)
SELECT @Result
Agradable. ¿Qué tal una versión en línea para evitar la sobrecarga de llamada de función? por ejemplo, SELECT DATEADD (año,
- 1. Javascript Fecha: mes siguiente
- 2. Fecha localizada (mes y día) y hora con NSDate
- 3. Django: Grupo por fecha (día, mes, año)
- 4. Crear una fecha solo con mes y día, sin año
- 5. cómo obtener el primer y último día de un mes dado
- 6. Fecha :: Calc - formatear el día y el mes
- 7. Ordenando por fecha descendente - mes, día y año
- 8. fecha Dividir en diferentes columnas de año, mes y día
- 9. SQL - Obtener Día numérica de mes/trimestre
- 10. Obtener detalles de la fecha (día, mes, año) en GWT
- 11. Jquery datepicker - solo día y mes
- 12. Siguiente día hábil de la fecha especificada en PHP
- 13. Primer y último día del mes actual
- 14. Crear fecha de día, mes, año campos en MySQL
- 15. Seleccione el primer día del mes anterior en (DB2) SQL
- 16. Cómo encontrar el primer día del mes siguiente y los días restantes hasta esta fecha con PHP
- 17. ¿Cómo determinar si el formato de fecha de la configuración regional es Mes/Día o Día/Mes?
- 18. primer día del mes anterior en javascript
- 19. Groovy/Grails clase fecha - día del mes conseguir
- 20. Cómo ser seleccionado día/mes y año de jquery datepicker
- 21. Dado año, mes y día, todo en int, ¿cómo generaría un NSDate
- 22. NSDate devuelve una fecha incorrecta el primer día del mes
- 23. primera y última fecha del mes anterior
- 24. Buscar el nombre del día por año, mes y día
- 25. ¿Cómo calculo el último día del mes en SQL?
- 26. Cómo determinar día, mes y año como int en iOS
- 27. DateTime.Now.ToShortDateString(); reemplazan mes y el día
- 28. día 1 de mes usando NSCalendar
- 29. Calcule el último día de la semana de un mes
- 30. día extracto de Fecha
¿cómo sabes qué año de usar? ¿Estás asumiendo que siempre estará basado en la fecha actual? Además, ¿qué base de datos estás usando? – northpole
Se basa a partir de hoy. Entonces digamos que hoy es 23/6/2009. La fecha en la tabla es month = 6, day = 22. Entonces quiero que regrese 22/06/2010 porque esa es la próxima fecha. –