2
votes

Comment obtenir la date de début / fin à partir d'une colonne de date unique à partir d'une table SQL Server

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.

  • si le mois n'est pas nul, ajoutez-le à la date de début pour obtenir la date de fin
  • si le jour n'est pas nul, ajoutez-le à la date de début pour obtenir la date de fin

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?


1 commentaires

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.


3 Réponses :


0
votes

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


0 commentaires

0
votes

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


5 commentaires

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.



1
votes

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


0 commentaires