Principale utente con più risposte
PROBLEMA sql confronto tra date

Domanda
-
salve!
ho 2 database
[PLC] con campo DATA_ORA (datetime) con l'ora in dd/mm/yyyy hh:mm:ss.mmm (con i millesimi)
come faccio a confrontare tale data con una data che proviene da un altra tabella
myData_Ora CHE NON HA I MILLESIMI ?
HO PROVATO A SCRIVERE IN UNA PROCEDURA VB6
MA HO UN PROBLEMA DI CONFRONTO
dim dTimeStamp_UltimoDati as date....
dTimeStamp_UltimoDati = rs!myData_ORA
"select * from PLC where " & "Plc.Data_Ora > CONVERT(datetime,'" & _
myData_To_SQLSting(dTimeStamp_UltimoDati) & "',120) " & _
")"
dove
Public Function mtData_To_SQLSting(dDataITA As Date) As String
' 2014 - converte data in formato ITALIANO in SQL stringa
'Dim dDataITA As Date
'dDataITA = Now
'Debug.Print dDataITA
'Debug.Print Format(dDataITA, "MM/dd/yyyy hh:mm:ss")
mtData_To_SQLSting = Format(dDataITA, "MM/dd/yyyy hh:mm:ss")
End Function
Risposte
-
direi di codice SQL
...
WHERE plc.DATA_ORA (non vorrei avere tra i piedi i millesimi)
>
mydb.Data_ORA (che non ha i millesimi)
come devo fare?
Grazie anticpatamente
(sempre però sulla stessa macchina):
SELECT * FROM [Db1].[dbo].[TbPrenotazioni] INNER JOIN [Db2].[dbo].[TbUtenti] ON [Db1].[dbo].[TbPrenotazioni].Cliente_ID = [Db2].[dbo].[TbUtenti].IdUtente WHERE CONVERT(datetime,[Db1].[dbo].[TbPrenotazioni].Partenza,105) > CONVERT(datetime,[Db2].[dbo].[TbUtenti].DataAccesso,105)
Chiaramente non avendo la definizione delle tue due colonne ho fatto un esempio sul mio server.
Questa query effettua una select su due DB confrontando due campi (uno Date e l'altro Datetime) delle due tabelle distinte.
In SqlServer il riferimento ad una tabella è diviso in tre parti (sempre se i due DB
si trovino sulla stessamacchina):
[NomeDB].[Schema].[Tabella]
Ti segnalo la guida su MSDN sulla funzione Convert di SQL SERVER.
Ciao
Paolo Pranzo
- Proposto come risposta Edoardo BenussiMVP, Moderator giovedì 4 dicembre 2014 11:26
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator venerdì 24 luglio 2020 15:18
-
Ciao,
i confronti e la manipolazione dei tipi Date (DateTime, smalldatetime, date etc..) non sono sensibili all'impostazione di language: di fatto il confronto avviene sempre tra entità di tipo numerico.
Se i sistemi coinvolti non fossero omogenei potresti sempre usare la funzione convert di cui sopra, avendo però l'accortezza di usare un formato naturalmente ordinato da sinistra a destra, come ad esempio l'ODBC (codice 120 senza ms oppure 121 con ms) oppure l'ISO (codice 127).
L'utilizzo di convert nelle condizioni where può avere effetti molto pesanti sulle performances della query in quanto di fatto impedisce l'utilizzo di eventuali indici sui campi date coinvolti.
Il formato 105 rimuove la parte ora (hh:mm:ss.mmm) in toto e quindi riduce il confronto alla sola parte data.
G.
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator venerdì 24 luglio 2020 15:18
Tutte le risposte
-
-
-
direi di codice SQL
...
WHERE plc.DATA_ORA (non vorrei avere tra i piedi i millesimi)
>
mydb.Data_ORA (che non ha i millesimi)
come devo fare?
Grazie anticpatamente
(sempre però sulla stessa macchina):
SELECT * FROM [Db1].[dbo].[TbPrenotazioni] INNER JOIN [Db2].[dbo].[TbUtenti] ON [Db1].[dbo].[TbPrenotazioni].Cliente_ID = [Db2].[dbo].[TbUtenti].IdUtente WHERE CONVERT(datetime,[Db1].[dbo].[TbPrenotazioni].Partenza,105) > CONVERT(datetime,[Db2].[dbo].[TbUtenti].DataAccesso,105)
Chiaramente non avendo la definizione delle tue due colonne ho fatto un esempio sul mio server.
Questa query effettua una select su due DB confrontando due campi (uno Date e l'altro Datetime) delle due tabelle distinte.
In SqlServer il riferimento ad una tabella è diviso in tre parti (sempre se i due DB
si trovino sulla stessamacchina):
[NomeDB].[Schema].[Tabella]
Ti segnalo la guida su MSDN sulla funzione Convert di SQL SERVER.
Ciao
Paolo Pranzo
- Proposto come risposta Edoardo BenussiMVP, Moderator giovedì 4 dicembre 2014 11:26
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator venerdì 24 luglio 2020 15:18
-
direi di codice SQL
...
WHERE plc.DATA_ORA (non vorrei avere tra i piedi i millesimi)
>
mydb.Data_ORA (che non ha i millesimi)
come devo fare?
Grazie anticpatamente
Ciao, questo è un esempio di una query effettuata su due db sqlserver diversi
(sempre però sulla stessa macchina):
SELECT * FROM [Db1].[dbo].[TbPrenotazioni] INNER JOIN [Db2].[dbo].[TbUtenti] ON [Db1].[dbo].[TbPrenotazioni].Cliente_ID = [Db2].[dbo].[TbUtenti].IdUtente WHERE CONVERT(datetime,[Db1].[dbo].[TbPrenotazioni].Partenza,105) > CONVERT(datetime,[Db2].[dbo].[TbUtenti].DataAccesso,105)
Chiaramente non avendo la definizione delle tue due colonne ho fatto un esempio sul mio server.
Questa query effettua una select su due DB confrontando due campi (uno Date e l'altro Datetime) delle due tabelle distinte.
In SqlServer il riferimento ad una tabella è diviso in tre parti (sempre se i due DB
si trovino sulla stessamacchina):
[NomeDB].[Schema].[Tabella]
Ti segnalo la guida su MSDN sulla funzione Convert di SQL SERVER.
Ciao
Paolo Pranzo
Ciao, ho lo stesso problema con l'aggiunta che i due database che confronto risiedono in machine diverse con lingue di sistema differenti, una in ITALIANO e l'altra in INGLESE..
In questo caso come posso confrontare correttamente i due valori di data?
Marco
-
Ciao,
i confronti e la manipolazione dei tipi Date (DateTime, smalldatetime, date etc..) non sono sensibili all'impostazione di language: di fatto il confronto avviene sempre tra entità di tipo numerico.
Se i sistemi coinvolti non fossero omogenei potresti sempre usare la funzione convert di cui sopra, avendo però l'accortezza di usare un formato naturalmente ordinato da sinistra a destra, come ad esempio l'ODBC (codice 120 senza ms oppure 121 con ms) oppure l'ISO (codice 127).
L'utilizzo di convert nelle condizioni where può avere effetti molto pesanti sulle performances della query in quanto di fatto impedisce l'utilizzo di eventuali indici sui campi date coinvolti.
Il formato 105 rimuove la parte ora (hh:mm:ss.mmm) in toto e quindi riduce il confronto alla sola parte data.
G.
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator venerdì 24 luglio 2020 15:18
-