Domanda

Ho bisogno l'anno e il mese distinta dalla colonna data che sarebbero allineati secondo la stessa colonna.

Non ho data coulmn con valori come (AAAA / MM / GG)

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

dopo aver interrogazione, dovrebbe essere

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

Ciò non sembra funzionare

SELECT distinct (cast(year(datecol) as nvarchar(20) ) +
       '/'+ cast(month(datecol) as nvarchar(20) ) + '/1') as dt1 
FROM Table 
ORDER BY dt1
È stato utile?

Soluzione

Soemthing come questo dovrebbe funzionare su MS SQL Server:

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

La funzione di chiamata DATEADD sottrae sostanzialmente (giorno-1) giorni dalla data corrente -.> Si ottiene sempre la prima di qualsiasi mese, che data è in

Ordina per esso e il gioco è fatto! : -)

Inoltre, si potrebbe anche aggiungere questa funzionalità al vostro tavolo come una "colonna calcolata" e quindi utilizzare tale per un facile acccess:

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

Poi la query potrebbe essere ancora più semplice:

SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth

Marc

Altri suggerimenti

Quando si tratta di date in evitare di SqlServer utilizzando cast come questo -. Il formato risultante cambia a seconda configurazione del server

convert e scegliere un formato (ad esempio, 112 ) che aggiunge zeri iniziali al mese.

Anil, Hai anche part-time nelle date? Cosa dataType stai usando per la colonna? Tu sei utilizzando DateTime dataType o Char?

Questo funziona per me

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top