Aiuto query su campo data

mercoledì 20 giugno 2007 - 14.25

PEPE Profilo | Senior Member

Salve a tutti,
avrei bisogno di un vostro aiuto per creare una query di ricerca su un campo data.
Fino a quando devo ricercare dei record tra un range di date o maggiore di o minore di è abbastanza banale.
Quello che non riesco a realizzare sono query del tipo

1) Tutti i record che fanno parte della prima settimana di ogni mese (1/7 maggio + 1/7 giugno + ecc ecc)

2) I record del 6 di ogni mese

3) I record del giorno 10 ed 11 tra le 10 e le 14 di ogni mese.

Il campo creato è di tipo datetime su sql server 2000 quindi se vado a vedere il contenuto ho una cosa del tipo (gg/mm/aaaa hh:mm:ss).

Grazie 1000 per l'aiuto,
Luca.

lbenaglia Profilo | Guru

>avrei bisogno di un vostro aiuto per creare una query di ricerca
>su un campo data.

Ciao Luca,

Iniziamo a preparare un piccolo esempio:

USE tempdb; CREATE TABLE dbo.myData( DataID int NOT NULL IDENTITY PRIMARY KEY, Date datetime NOT NULL ); INSERT dbo.myData VALUES('20070531'); INSERT dbo.myData VALUES('20070601'); INSERT dbo.myData VALUES('20070603'); INSERT dbo.myData VALUES('20070606'); INSERT dbo.myData VALUES('20070607'); INSERT dbo.myData VALUES('20050304'); INSERT dbo.myData VALUES('20040308'); INSERT dbo.myData VALUES('20060406'); INSERT dbo.myData VALUES('20070906'); INSERT dbo.myData VALUES('20070510'); INSERT dbo.myData VALUES('20070510 09:59:59.997'); INSERT dbo.myData VALUES('20070510 10:00'); INSERT dbo.myData VALUES('20070510 13:59:59.997'); INSERT dbo.myData VALUES('20070510 14:00'); INSERT dbo.myData VALUES('20070510 14:00:00.333'); INSERT dbo.myData VALUES('20060611 09:59:59.997'); INSERT dbo.myData VALUES('20060611 10:00'); INSERT dbo.myData VALUES('20060611 13:59:59.997'); INSERT dbo.myData VALUES('20060611 14:00'); INSERT dbo.myData VALUES('20060611 14:00:00.333');

>Quello che non riesco a realizzare sono query del tipo
>
>1) Tutti i record che fanno parte della prima settimana di ogni
>mese (1/7 maggio + 1/7 giugno + ecc ecc)

SELECT * FROM dbo.myData WHERE DAY(Date) BETWEEN 1 AND 7; /* Output: DataID Date ----------- ----------------------- 2 2007-06-01 00:00:00.000 3 2007-06-03 00:00:00.000 4 2007-06-06 00:00:00.000 5 2007-06-07 00:00:00.000 6 2005-03-04 00:00:00.000 8 2006-04-06 00:00:00.000 9 2007-09-06 00:00:00.000 (7 row(s) affected) */

>2) I record del 6 di ogni mese

SELECT * FROM dbo.myData WHERE DAY(Date) = 6; /* Output: DataID Date ----------- ----------------------- 4 2007-06-06 00:00:00.000 8 2006-04-06 00:00:00.000 9 2007-09-06 00:00:00.000 (3 row(s) affected) */

>3) I record del giorno 10 ed 11 tra le 10 e le 14 di ogni mese.

SELECT * FROM dbo.myData WHERE DAY(Date) BETWEEN 10 AND 11 AND CAST(CONVERT(varchar, Date, 114) AS datetime) BETWEEN '10:00' AND '13:59:59.997'; /* Output: DataID Date ----------- ----------------------- 12 2007-05-10 10:00:00.000 13 2007-05-10 13:59:59.997 17 2006-06-11 10:00:00.000 18 2006-06-11 13:59:59.997 (4 row(s) affected) */

Per maggiore dettagli consulta i Books Online.

>Grazie 1000 per l'aiuto,
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

PEPE Profilo | Senior Member

Grazie 1000 Lorenzo,
la prossima volta sarò piu attento nel ricercare in giro risoluzioni a problematiche di questo tipo ma oggi era urgente :D.

Ciao ciao,
Luca.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5