Dans mon tableau j'ai un champ Month (tinyint) et un Day (tinyint). Je voudrais avoir une fonction qui prend ce mois et ce jour et produit un datetime pour la prochaine date (y compris l'année) donné ce mois et ce jour. Donc si j'avais Mois = 9, Jour = 7 cela produirait 9/7/2009.
Si j'avais Mois 1, Jour 1, il produirait 1/1/2010.SQL: Comment produire la date suivante donnée mois et jour
Répondre
quelque chose comme ça fonctionnerait. C'est une variante de votre méthode, mais elle n'utilise pas le format littéral MM/DD/YYYY, et elle ne va pas exploser contre les mauvaises entrées (pour le meilleur ou pour le pire).
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
Sinon, pour créer une chaîne au format AAAAMMJJ:
set @date =
right('0000'+convert(char(4),year(getdate())),4)
+ right('00'+convert(char(2),@month),2)
+ right('00'+convert(char(2),@day),2)
Une autre méthode, qui évite littéraux tous ensemble:
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
Voici mon exemple sql jusqu'à présent. Je ne l'aime pas vraiment bien ...
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
N'utilisez pas le format MM/JJ/AAAA pour les littéraux de date. Utilisez YYYYMMDD à la place. Cela évitera les problèmes de localisation et il trie correctement. –
Sinon, je ne vois pas de problème avec votre méthode. Aimez-vous la conversion d'un littéral? –
Il semble que quelque chose devrait être une solution facile. –
est ici une solution avec PostgreSQL
your_date_calculated = Year * 10000 + Month * 100 + Day
vous donne une date comme 20090623.
select cast(cast(your_date_calculated as varchar) as date) + 1
Voilà ma version. Le cœur de c'est à seulement deux lignes, en utilisant la fonction DATEADD
, et il ne nécessite pas de conversion/de cordes, flotte ou toute autre chose:
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
Nice. Que diriez-vous d'une version en ligne pour éviter la surcharge de l'appel de fonction? Par exemple, SELECT DATEADD (année,
- 1. mois Peuplement et jour
- 2. Étant donné une date, comment obtenir la date suivante et précédente dans la base de données
- 3. JExcelAPI - la date d'écriture dans la feuille Excel ignore le jour, le mois et l'année
- 4. Groovy/Grails classe date - obtenir le jour du mois
- 5. C# .Net Obtenir le dernier jour du mois précédent à partir de la date du jour
- 6. Date de validation sont séquentielles par mois
- 7. Comment fournir la page suivante du contenu mis à jour?
- 8. Comment calculer le dernier jour du mois en SQL?
- 9. Changer la date et le groupe par mois fiscal Fin
- 10. Comparer la date du jour avec la date-heure enregistrée en utilisant un mois par an seulement
- 11. Comment trouver quel jour de la semaine pour une date donnée en utilisant Cocoa
- 12. Comment puis-je obtenir la date suivante en utilisant NSDate?
- 13. Comment String.Format le jour du mois dans C#?
- 14. Méthode la plus simple pour créer une date correspondant au premier jour du mois, avec une autre date
- 15. Date 'wrap' en soustrayant mois
- 16. Calculer la date de début et le nom d'un trimestre à partir d'une date donnée
- 17. Ajouter une date sans dépasser un mois
- 18. Besoin d'assistance rembourrage mois et jour avec 0
- 19. Extrait d'un mois à partir d'une date
- 20. Calculer en SQL le premier jour ouvrable d'un mois donné
- 21. Comment créer une heure UTC en C pour un jour, un mois et une année spécifiques?
- 22. SQL Server le meilleur moyen de calculer datediff entre la ligne actuelle et la ligne suivante?
- 23. Problème de date et de date SQL
- 24. Comment puis-je calculer la date précédant une date donnée dans unix?
- 25. Comment valider une date donnée dans un système de calendrier spécifique à partir d'une chaîne?
- 26. Pourquoi mon script Falcon imprime-t-il la date un mois avant la date d'aujourd'hui?
- 27. Pour vérifier le jour de la semaine d'un mois
- 28. suggérer tout contrôle Asp.net pour ajouter la date de naissance en spécifiant jour, mois et année dans chaque menu déroulant
- 29. SAS numéro DATE - calcul « nearest MOIS »
- 30. Actionscript 3 Date ajoute 1 mois
comment savez-vous quelle année à utiliser? Supposons-nous simplement qu'il sera toujours basé sur la date actuelle? Aussi, quelle base de données utilisez-vous? – northpole
C'est basé sur aujourd'hui. Alors disons aujourd'hui est le 23/06/2009. La date dans la table est month = 6, day = 22. Ensuite, je veux que ça retourne 22/06/2010 parce que c'est la date suivante. –