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