17 messaggi dal 27 giugno 2005
Salve a tutti, ho un problema che non riesco a risolvere completamente. Utilizzando Access avevo una query che eseguiva il concatenamento di tre campi con la funzione dateSerial(campogg;campomm;campoaa) restituendomi una data. Sempre in questo campo c'era un filtro che mi visualizzava solo i record con >Date(). Tutto questo non è più valido in Vista di SQLServer. Sono solo riuscito a recuperare e concatenare i valori dei tre campi con la funzione CAST e LTRIM ottenendo una campo di tipo smalldatetime (almeno penso), ma non riesco a filtrare i dati visualizzando solo quelli maggiori della data odierna.

Ho provato con >GETDATE() ma mi restituisce errore di conversione da varchar a smalldatetime non compreso nell'intervallo di valori validi.

Come posso fare?
Grazie in anticipo
Gianluca
1.976 messaggi dal 27 luglio 2005
Contributi
salve Gianluca,
Gianluca Pierfrancesco ha scritto:
Salve a tutti, ho un problema che non riesco a risolvere completamente. Utilizzando Access avevo una query che eseguiva il concatenamento di tre campi con la funzione dateSerial(campogg;campomm;campoaa) restituendomi una data. Sempre in questo campo c'era un filtro che mi visualizzava solo i record con >Date(). Tutto questo non è più valido in Vista di SQLServer. Sono solo riuscito a recuperare e concatenare i valori dei tre campi con la funzione CAST e LTRIM ottenendo una campo di tipo smalldatetime (almeno penso), ma non riesco a filtrare i dati visualizzando solo quelli maggiori della data odierna.

Ho provato con >GETDATE() ma mi restituisce errore di conversione da varchar a smalldatetime non compreso nell'intervallo di valori validi.

Come posso fare?
Grazie in anticipo
Gianluca


GETDATE() restituisce la data completa della parte temporale, quindi anche ora minuti e secondi...
se tu quindi confronti GETDATE() con un valore appena precedente di GETDATE() stesso non avrai un'identita' di valori in quanto del tempo e' trascorso tra l'esecuzione delle 2 chiamate... devi percio' ad esempio prendere la sola parte "data" del valore a te interessante e confrontarla con il contenuto della colonna...

SET NOCOUNT ON
USE tempdb
GO
CREATE TABLE dbo.Test (
Dt datetime PRIMARY KEY ,
Dati varchar(23) NOT NULL
)
GO
INSERT INTO dbo.Test VALUES (DATEADD(dd,-1,GETDATE()), CONVERT(varchar, DATEADD(dd,-1,GETDATE()),120))
WAITFOR DELAY '000:00:01'

INSERT INTO dbo.Test VALUES (DATEADD(dd,-1,GETDATE()), CONVERT(varchar, DATEADD(dd,-1,GETDATE()),120))
WAITFOR DELAY '000:00:01'

INSERT INTO dbo.Test VALUES (GETDATE(), CONVERT(varchar, GETDATE(),120))
WAITFOR DELAY '000:00:01'
INSERT INTO dbo.Test VALUES (GETDATE(), CONVERT(varchar, GETDATE(),120))
WAITFOR DELAY '000:00:01'
INSERT INTO dbo.Test VALUES (GETDATE(), CONVERT(varchar, GETDATE(),120))
WAITFOR DELAY '000:00:01'
INSERT INTO dbo.Test VALUES (GETDATE(), CONVERT(varchar, GETDATE(),120))
WAITFOR DELAY '000:00:01'
GO
PRINT 'Tutti'
SELECT *
FROM dbo.Test

PRINT 'Solo date maggiori o uguali a oggi'
SELECT *
FROM dbo.Test t
WHERE t.DT >= CONVERT(varchar(10), GETDATE(), 120)
GO
DROP TABLE dbo.Test
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
17 messaggi dal 27 giugno 2005
Anche questa è fatta!!
Grazie alla prossima
Gianluca

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.