Pourriez-vous s'il vous plaît m'aider à trouver une solution à mon problème. J'utilise une base de données SQL Server et je souhaite obtenir la date de fin à partir de la date de début + mois ou jour.
J'ai ce tableau:
| ID | startdate | month | day | enddate | | 1 | 2019-03-05| 3 | null |2019-06-05 | | 2 | 2019-03-05| null | 30 |2019-04-04 |
Résultat souhaité:
| ID | startdate | month | day | | 1 | 2019-03-05| 3 | null | | 2 | 2019-03-05| null | 30 |
Pourriez-vous s'il vous plaît m'aider écrire une requête SQL s'il vous plaît?
3 Réponses :
vous pouvez essayer ci-dessous - en utilisant la fonction dateadd ()
select id,
startdate,
dateadd(case when month is null then dd else mm, coalesce(month,day),startdate) as enddate
from tablename
Vous pouvez essayer la requête suivante en utilisant la fonction Dateadd (). La fonction DATEADD () ajoute un intervalle heure / date à une date, puis renvoie la date.
Select Id, startdate, month, day,
case when month is null then
DATEADD(dd, isnull(day, 0), startDate)
else
DATEADD(mm, isnull(month,0), startDate)
end
AS endDate
from tblMonth
Pour ajouter une date avec vérification, vous pouvez utiliser la déclaration de cas comme indiqué ci-dessous.
create table tblMonth (Id int, startdate date, month int, day int)
insert into tblMonth values
( 1, '2019-03-05', 3, null),
(1, '2019-03-05', null, 30)
Select Id, startdate, month, day, DATEADD(MM, isnull(month,0), startDate) AS endDate
from tblMonth
Démo en direct
cela fonctionne avec le mois mais le jour dans l'exemple n'a pas fonctionné
@ahmed vérifie la requête modifiée.
@ahmed Vous demande d'accepter la réponse si elle a résolu votre problème.
Et si le mois et le jour les deux colonnes ont une valeur?
@Mukesh Arora ce n'est pas un gros problème et OP sait mieux que nous comment gérer et quoi faire dans ce cas, mais dans mon cas, une autre partie fonctionnera.
Vous pouvez utiliser la requête ci-dessous pour obtenir le résultat souhaité
declare @TestDate table
(id int, startdate date, [month] int, [day] int)
insert into @TestDate
values
(1, '2019-03-05', 3, null)
insert into @TestDate
values
(1, '2019-03-05', null, 30)
select Id,
startdate,
[month],
[day],
dateadd(day, isnull(day, 0), dateadd(month, isnull([month], 0), startdate)) as enddate
from @TestDate
Lorsque vous ajouterez 30 jours le 5 mars 2019, cela donnera le 4 avril 2019 et non le 5 avril, alors corrigez-le dans la sortie souhaitée. C'est parce que le mois de mars est pour les 31 jours.