2017-10-20 17 views
0

je suis arrivé ces données de ma table:SQL Server 2014 Dates Exploding montrent que l'année

id arrival_date departure_date 
1  2017-10-10  2017-10-15 
2  2017-11-16  2017-11-30 
3  2017-10-14  2017-10-31 
4  2018-05-12  2017-05-22 
5  2021-01-16  2021-03-15 
6  2018-06-02  2017-07-02 

Tout ce que je veux est de faire exploser ces date, mais je veux seulement montrer l'année seulement

date 
2017 
2018 
2019 
2020 
2021 

ceux-ci devraient être la fois que je voulais voir est leur toute requête pour ceux-ci? Note: si cette année est 2018, elle devrait commencer en 2018, donc j'utiliserai getdate() dans cette instance, je veux obtenir le maximum dans la partie departure_date, puis-je faire cela?

+0

Quelle est la définition du schéma de votre table? S'agit-il de chaînes ou de types réels date/datetime/ou datetime2? – Igor

+0

@igor ce ne sont que date type de données – GGw

+0

Avez-vous essayé 'YEAR'? –

Répondre

1

Vous pouvez essayer un cte récursive

DECLARE @maxYear INT 
SELECT @maxYear = MAX(YEAR(departure_date)) FROM YourTable 

;WITH cte 
AS 
(
    SELECT YEAR(GETDATE()) AS [Year] 
    UNION ALL 
    SELECT [Year] + 1 
    FROM cte 
    WHERE [Year] < @maxYear 
) 

SELECT * 
FROM cte 

DEMO

+0

cela répond à ma question :) – GGw

+0

Cela fonctionne mais attention. Utiliser un cte récursif pour compter comme ça semble basé sur un ensemble mais en réalité ce n'est pas le cas. http://www.sqlservercentral.com/articles/T-SQL/74118/ –

+0

remercie beaucoup l'homme :) – GGw

1

Il suffit d'utiliser YEAR(arrival_date) et YEAR(departure_date)

+0

Je reçois cela mais la chose est que je veux l'exploser, je veux que la sortie soit comme la 2ème partie – GGw