81 messaggi dal 03 giugno 2001
ciao a tutti,
faccio una semplice query come questa che funge...

SELECT MIN([dbo].[Programma Scientifico].Inizio) as Inizio, MAX([dbo].[Programma Scientifico].Fine) as Fine, 
[dbo].[Programma Scientifico].[ID Sessione], [dbo].Sessioni.Descrizione as Sessione,
 [dbo].[Programma Scientifico].[ID Sala], [dbo].Sale.Descrizione as Sala FROM 
(([dbo].[Programma Scientifico] INNER JOIN [dbo].Sale ON 
[dbo].[Programma Scientifico].[ID Sala] = 
[dbo].Sale.ID) LEFT JOIN [dbo].Sessioni ON 
[dbo].[Programma Scientifico].[ID Sessione] = [dbo].Sessioni.ID) 
INNER JOIN [dbo].[Partecipanti Congresso] ON 
[dbo].[Programma Scientifico].[ID Partecipante] = [dbo].[Partecipanti Congresso].ID
 WHERE [dbo].[Partecipanti Congresso].[Codice Congresso]=12
 and REPLACE(CONVERT(VARCHAR(10),[dbo].[Programma Scientifico].[Inizio], 111), '/', '')='20090205' 
and [dbo].[Programma Scientifico].[ID Sala]=8 

group by [dbo].[Programma Scientifico].[ID Sessione],[dbo].Sessioni.Descrizione, [dbo].[Programma Scientifico].[ID Sala], [dbo].Sale.Descrizione



ma se aggiungo nella where questa condizione no mi trova nulla..

and (([dbo].[Programma Scientifico].[Inizio] < '2009-02-05 09:30:00.000')
and ([dbo].[Programma Scientifico].[Fine] > '2009-02-05 09:40:00.000'))

ho provato anche con il beetween ma nulla devo vedere se queste date che passo sono comprese in un certo range...
ho paura che le date che gli passo magari vanno convertite... ma in internet vedo che i confronti con le date vendono fatte appunto così come ho fatto....
Una buona giornata
Giuseppe

------------------------------------
"Nella vita non si è mai fermi o si va avanti o... si va indietro"
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
L'unico formato asettico da qualunque impostazione è il formato ISO, ovvero "YYYYMMDD". Tutti gli altri sono sensibili alle impostazioni linguistiche in uso e che a diversi livelli (database server, login, regional settings, lingua del driver odbc/oledb, ecc) possono interferire con le tue intenzioni.
Segui questo esempio

SET LANGUAGE us_english
SELECT MONTH(CAST('2008-11-01' AS datetime))

SET LANGUAGE british
SELECT MONTH(CAST('2008-11-01' AS datetime))

e potrai verificare che il formato che stai utilizzando non è privo di ambiguità...

Bye
81 messaggi dal 03 giugno 2001
grazie i l.bianchi ....nel primo caso il mese è 11 nel secondo 1.
va bene così?
in realtà i campi sono datetime e aq me server vedere il range di ora perch+ comunuqe il giorno sono sicuro che è quello da un'altra condizione che imposto e che almeno questa funge...
ce forse qualche altro modo per confrontare le ore in sqlserv?

grazie mille della risposta... ste date e orari mi stanno facendo usci matto..:)

------------------------------------
"Nella vita non si è mai fermi o si va avanti o... si va indietro"
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
girub wrote:
grazie i l.bianchi ....nel primo caso il mese è 11 nel secondo 1. va bene così?
in realtà i campi sono datetime e aq me server vedere il range di ora perch+ comunuqe il giorno sono sicuro che è quello da un'altra condizione che imposto e che almeno questa funge...
ce forse qualche altro modo per confrontare le ore in sqlserv?
grazie mille della risposta... ste date e orari mi stanno facendo usci matto..

la verifica di confronto per la sola parte temporale, purtroppo, diventa "laboriosa" in quanto devi estrarre il datepart di ogni componente a te eventualmente interessante quindi, tipicamente, ora minuto e secondo, che puo' essere formalizzato in
DECLARE @d1 datetime, @d2 datetime;
SELECT @d1 = '19510831 12:30:45', @d2 = '20081125 12:30:45'; IF DATEPART( hh, @d1 ) = DATEPART( hh, @d2 )
AND DATEPART( mi, @d1 ) = DATEPART( mi, @d2 )
AND DATEPART( ss, @d1 ) = DATEPART( ss, @d2 )
PRINT 'la parte oraria è uguale';

personalmente pero', visto che vai ad applicare una funzione sulla parte temporale, eseguirei il confronto direttamente sull'intero dominio data+tempo, come anche tu hai gia' fatto, formalizzato in
DECLARE @d1 datetime, @d2 datetime;
DECLARE @r1 datetime, @r2 datetime;
SELECT @d1 = '19510831 12:30:45', @d2 = '20081125 12:30:45', @r1 = '19510831 12:30:40', @r2 = '20081125 12:30:30';

IF @d1 > @r1 AND @d1 <= @r2
PRINT '@r1 rientra nel range di data+tempo';

IF @d2 > @r1 AND @d2 <= @r2
PRINT '@r2 rientra nel range di data+tempo';

verifica quindi che, in effetti, i dati a tua disposizione rientrino correttamente negli intervalli temporali..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
81 messaggi dal 03 giugno 2001
grazie Andrea,
ti chiedo solo una cosa... ho provato questo tuo script nel front end di sqlserver è mi funge...

ma per poter utilizzare... questi comandi dovrei fare una storeprocedure...?
come faccio a utilizzare... a fare un controllo.. visto che la mia query...è in una funzione dove gli passo le due date da confrontare....

Mi chiedo.. ancora.... non ci sono altre strade...
devo per forza ricorrerrere a una funzione o una store proc?
Non potrei trasformare orario cosi come trasformo qui il giorno
REPLACE(CONVERT(VARCHAR(10),[dbo].[Programma Scientifico].[Inizio], 111), '/', '')='20090205'

per poi confrontarlo come due interi?

grazie ancora...
Modificato da girub il 03 novembre 2008 19.09 -

------------------------------------
"Nella vita non si è mai fermi o si va avanti o... si va indietro"
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
girub wrote:
grazie Andrea,
ti chiedo solo una cosa... ho provato questo tuo script nel front end di sqlserver è mi funge...

ma per poter utilizzare... questi comandi dovrei fare una
storeprocedure...?
come faccio a utilizzare... a fare un controllo.. visto che la mia query...è in una funzione dove gli passo le due date da
confrontare....

una funzione di che tipo? intendi una user defined function di SQL Server o una funzione del tuo applicativo?

Mi chiedo.. ancora.... non ci sono altre strade...
devo per forza ricorrerrere a una funzione o una store proc? Non potrei trasformare orario cosi come trasformo qui il giorno REPLACE(CONVERT(VARCHAR(10),[dbo].[Programma Scientifico].[Inizio], 111), '/', '')='20090205'

per poi confrontarlo come due interi?

non sono "interi", sono eventualmente rappresentazioni "testuali" di una data... un testo, qualora possa essere convertito in una data, viene automagicamente convertito in tal senso..
se tu scrivi
WHERE colonnaData >= '20081231 15:30:45'
il secondo viene convertito in una data (usa sempre questo tipo di formato per operare sulle date) ed il confronto avviene apputo tra il valore data della [colonnaData] e la conversione implicita del tuo parametro.. e proprio questo deve avvenire, a prescindere che la rappresentazione testuale possa sembrarti comunque "correttamente" interpretabile e valutabile { colonnaData = '20090101 00 0 0' > '20081231 15:30:45' = true }
al di la' di questo, non e' ovviamente necessario ricorrere ad una stored procedure.. puoi tranquillamente ad esempio eseguire un command che includa questo codice SQL dinamico, similarmente a
dim cmd as SQLClient.SQLCommand
.....
cmd.CommandText = "SELECT ... FROM ... WHERE colonnaData >= '20081231 15:30:45' ORDER BY .. ;"
anche se personalmente sono molto riluttante all'utilizzo di codice di questo tipo, ma qui il discorso si fa "lungo e filosofico".. ti basti sapere che ovviamente, avendo codice SQL sparso per l'applicazione non potrai mai essere completamente sicuro dell'esposizione della tua superficie di attacco.. personalmente non concedo mai (ok, quasi mai) privilegi sulle base table e tutte le operazioni
(selezione/aggiornamento/inserimento/cancellazione) avvengono tramite apposite stored procedures.. gli utenti hanno solo privilegi di esecuzione di determinate procedure dipendentemente dalle loro qualifiche/necessita'.. a questo punto posso sapere per certo che una eventuale modifica puo' avvenire esclusivamente del codice SQL che e' sotto controllo completo [ovviamente eventualmente modificabile, nulla e' perfetto per definizione  ] e so anche dove ricercarlo, senza fare ricerche paniche all'interno di codice sorgente applicativo che magari non conosco... dallo stesso punto di vista, so anche che l'eventuale errore non puo' essere chissa' dove e chissa' quante volte ripetuto, ma esclusivamente in 1 singola procedura, in quanto quella singola procedura e' l'unica che esegue la determinata operazione..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.