Question

Je dois année distincte et mois de la colonne date qui sera trié par une même colonne.

J'ai la date coulmn avec des valeurs telles que (JJ / MM / JJ)

2007/11/7
2007/1/8
2007/11/4
2007/12/3
2008/10/4
2009/11/5
2008/5/16

après avoir requête, il doit être

2007/1/1
2007/11/1
2007/12/1
2008/5/1
2008/10/1
2009/11/1

Cela ne semble pas fonctionner

SELECT distinct (cast(year(datecol) as nvarchar(20) ) +
       '/'+ cast(month(datecol) as nvarchar(20) ) + '/1') as dt1 
FROM Table 
ORDER BY dt1
Était-ce utile?

La solution

soemthing comme cela fonctionnerait sur MS SQL Server:

select 
    distinct 
    dateadd(day, -1 * DAY(datefield) + 1, datefield)
From
    datetable
order by
    dateadd(day, -1 * DAY(datefield) + 1, datefield) 

Les jours de la date actuelle appel DATEADD soustraient essentiellement (jour 1) -.> Vous obtenez toujours le premier mois quel que soit cette date est en

Trier par et vous avez terminé! : -)

En outre, vous pouvez également ajouter cette fonctionnalité à votre table comme une « colonne calculée » et utiliser ensuite que pour acccess facile:

alter table yourTable 
  add FirstOfMonth As DATEADD(day, -1 * DAY(datefield) + 1, datefield) persisted

Ensuite, votre requête serait encore plus simple:

SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth

Marc

Autres conseils

Lorsque vous traitez avec des dates à SqlServer éviter d'utiliser cast comme ça -. Le format résultant change en fonction de configuration du serveur

Au lieu d'utiliser convert et choisir un format (par exemple 112 ) qui ajoute des zéros à gauche au mois.

Anil, Avez-vous aussi une partie de temps dans les dates? Qu'est-ce que dataType utilisez-vous pour la colonne? Es-tu en utilisant DateTime dataType ou Char?

Cela fonctionne pour moi

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top