salve,
girub wrote:
Ciao a tutti ho questa seelct che il suo lavoro
SELECT distinct CAST(DAY([Inizio]) AS VARCHAR(2)) + ' ' + DATENAME(MM, [Inizio]) + ' ' + CAST(YEAR([Inizio]) AS VARCHAR(4)) AS [data], [Inizio] FROM dbo.[Programma Scientifico] order by [Inizio]
ma non tanto....
nel senso mettendo il distinct vorrei prendere solo le date una volta sola....
ma questo è il risultato...
data ----------------
Inizio
5 aprile 2008 -------
2008-04-05 0900.000
5 aprile 2008 -------
2008-04-05 09:300.000
5 aprile 2008 -------
2008-04-05 1000.000
5 aprile 2008 -------
2008-04-05 10:300.000
5 aprile 2008 -------
2008-04-05 11:300.000
5 aprile 2008 -------
2008-04-05 12:300.000
4 maggio 2008 -------
2008-05-04 1200.000
12 maggio 2008 -------
2008-05-12 10:220.000
in realta quelllo che serve a me è solo il campo data ordinato in questo modo...
5 aprile 2008
4 maggio 2008
12 maggio 2008
il distinct corrisponde in effetti ad un group by, eseguito per tutte le colonne proiettate dalla select list.. visto che il datetime che utilizzi ha anche la parte "temporale" valorizzata oltre alla parte data, devi "troncare" la parte temporale in modo che sia "00
0
0.000" per tutti, cosi' che poi il raggruppamento restituisca il risultato corretto.. riguardo al risultato finale, che utilizza i "nomi" dei mesi, sono poco propenso ad una localizzazione italiana dello stesso, visto che cio' in effetti dipende strettamente dalle impostazioni di linguaggio della login attiva.. se altra login avesse, ad esempio, la lingua inglese come lingua utilizzata, ovviamente non avrai come risultato "aprile" bensi' "april" o altro..
puoi pero' quindi "giocare" con le funzioni data in modo da raggruppare per la sola parte data della colonna a te interessante, similarmente a SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
dt datetime NOT NULL
);
GO
INSERT INTO dbo.t VALUES ( '2008-04-05 09
0
0.000' );
INSERT INTO dbo.t VALUES ( '2008-04-05 09:30
0.000' );
INSERT INTO dbo.t VALUES ( '2008-04-05 10
0
0.000' );
INSERT INTO dbo.t VALUES ( '2008-04-05 10:30
0.000' );
INSERT INTO dbo.t VALUES ( '2008-04-06 10:30
0.000' );
INSERT INTO dbo.t VALUES ( '2008-04-06 10:31
0.000' );
INSERT INTO dbo.t VALUES ( '2008-04-07 10:30
0.000' );
INSERT INTO dbo.t VALUES ( '2008-04-07 11
0
0.000' );
GO
SELECT DISTINCT CONVERT(varchar, CONVERT(datetime, CONVERT(varchar(
, dt, 112)),107)
FROM dbo.t;
SELECT DISTINCT CAST(DAY([dt]) AS VARCHAR(2)) + ' ' + DATENAME(MM, [dt]) + ' ' + CAST(YEAR([dt]) AS VARCHAR(4)) AS [data]
FROM dbo.t;
GO
DROP TABLE dbo.t;
--<--------
------------------------------
Apr 05, 2008
Apr 06, 2008
Apr 07, 2008
data
--------------------------------------
5 April 2008
6 April 2008
7 April 2008
saluti