Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Uso di DateAdd in Sql-Transact
Forum - C# / VB.NET - Uso di DateAdd in Sql-Transact

Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 16:39
Martedì, 16/01/2024
Buon pomeriggio a tutti. Chiedo scusa ma mi è partita 2 volte e non so come cancellarne una.
Intanto mi scuserete se posto questa domanda in questo forum, non avendone trovato uno specifico relativamente a DB.

In Sql ho due tabelle collegate con un certo numero di campi:

Facendo questa query:
Codice sorgente - presumibilmente VB.NET

  1. use [Office4u]
  2. go
  3. SET DATEFORMAT dmy;
  4.  
  5. select idViaggio, IDAutoDipe, fkIdAutoDipe, dbo.O4uTbAutoDipe.DataModi as AutoDataModifica  from dbo.O4uTbViaggi Inner join dbo.O4uTbAutoDipe ON dbo.O4uTbViaggi.fkIdAutoDipe=dbo.O4uTbAutoDipe.IDDipe
  6. where dbo.O4uTbViaggi.DataModi <=  getdate()
  7. order by dbo.O4uTbAutoDipe.DataModi asc



Ottengo 41 records come da figura1 allegata. Mentre se eseguo la query utilizzando DateADD mi restituisce 0 records.
Questa la query modificata:

Codice sorgente - presumibilmente VB.NET

  1. use [Office4u]
  2. go
  3. SET DATEFORMAT dmy;
  4.  
  5. select idViaggio, IDAutoDipe, fkIdAutoDipe, dbo.O4uTbAutoDipe.DataModi as AutoDataModifica  from dbo.O4uTbViaggi Inner join dbo.O4uTbAutoDipe ON dbo.O4uTbViaggi.fkIdAutoDipe=dbo.O4uTbAutoDipe.IDDipe
  6. where dbo.O4uTbViaggi.DataModi <=  DateAdd(Month,-12,getdate())
  7. order by dbo.O4uTbAutoDipe.DataModi asc



Il DateAddDateAdd(Month,-12,getdate()) mi dovrebbe restituire '16-01-2023' e quindi mi dovrebbe restituire gli stessi records . Dove sbaglio?? Grazie per ogni aiuto


alip1 ha allegato un file: figura1.png (33842 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da alip1 il 16/01/2024 alle 16:43
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1349
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:13
Martedì, 16/01/2024
Testo quotato

Postato originariamente da alip1:

Il DateAddDateAdd(Month,-12,getdate()) mi dovrebbe restituire '16-01-2023' e quindi mi dovrebbe restituire gli stessi records . Dove sbaglio?? Grazie per ogni aiuto



Potrebbe essere un cambio di formattazione data.
Devi controllare come restituisce la data getdate().
Se è una stringa, dopo aver fatto DateAdd la data sarà: "16/01/2023" ma nel metodo ToString puoi rimettere tutto a posto.

In VB .Net:
Codice sorgente - presumibilmente VB.NET

  1. Dim getdate As DateTime = Convert.ToDateTime("16-01-2024") ' simulazione
  2. Dim Data As String = DateAdd(DateInterval.Month, -12, getdate).ToString("dd-MM-yyyy")



In C#:
Codice sorgente - presumibilmente C# / VB.NET

  1. DateTime getdate = Convert.ToDateTime("16-01-2024");  // simulazione
  2. string data = getdate.AddMonths(-12).ToString("dd-MM-yyyy");



Se getdate() retituisce un DateTime non ci devono essere problemi.



in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:19
Mercoledì, 17/01/2024
In realtà dovrebbe funzionare (e funziona perchè l'ho provato sui miei server), il problema deve essere da qualche altra parte.

Il tipo di dato del campo DataModi è DateTime?

Se vuoi proporre uno zip del DB o una esportazione della tabella, posso provare praticamente

Per una prova semplice prova ad eseguire

Codice sorgente - presumibilmente C# / VB.NET

  1. SELECT dbo.O4uTbAutoDipe.DataModi as AutoDataModifica  
  2. WHERE  dbo.O4uTbViaggi.DataModi <=  DateAdd(Month,-12,getdate())
  3. ORDER BY dbo.O4uTbAutoDipe.DataModi ASC



e vedi se viene eseguita correttamente

Ultima modifica effettuata da nessuno il 17/01/2024 alle 12:07


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:30
Venerdì, 19/01/2024
Non ti servono le risposte? Ma allora perché fare le domande nel forum?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 9:26
Mercoledì, 28/02/2024
Testo quotato

Postato originariamente da nessuno:

In realtà dovrebbe funzionare (e funziona perchè l'ho provato sui miei server), il problema deve essere da qualche altra parte.

Il tipo di dato del campo DataModi è DateTime?

Se vuoi proporre uno zip del DB o una esportazione della tabella, posso provare praticamente

Per una prova semplice prova ad eseguire

Codice sorgente - presumibilmente C# / VB.NET

  1. SELECT dbo.O4uTbAutoDipe.DataModi as AutoDataModifica  
  2. WHERE  dbo.O4uTbViaggi.DataModi <=  DateAdd(Month,-12,getdate())
  3. ORDER BY dbo.O4uTbAutoDipe.DataModi ASC



e vedi se viene eseguita correttamente



trattandosi di 2 tabelle manca l'inner join ed in ogni caso da 0 record.... il datamodi è datetime

PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 9:28
Mercoledì, 28/02/2024
Testo quotato

Postato originariamente da nessuno:

Non ti servono le risposte? Ma allora perché fare le domande nel forum?


non è che non mi servono risposte ma avendo ottenute risposte non adeguate ed avendo dovuto risolvere in tempi brevi... ipoi ci si dimentica
scusami non volevo essere scortese con nessuno

PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 10:43
Mercoledì, 28/02/2024
in ogni caso ho risolto così:
Codice sorgente - presumibilmente VB.NET

  1. use [Office4u]
  2. go
  3.  
  4. DECLARE @DataRif date
  5.  
  6. SET @DataRif = getdate()
  7.  
  8. SET DATEFORMAT dmy;
  9.  
  10. SET @DataRif = DateAdd(m,-12, getdate() )
  11.  
  12. select idViaggio, IDAutoDipe, fkIdAutoDipe, dbo.O4uTbAutoDipe.DataModi as AutoDataModifica  from dbo.O4uTbViaggi Inner join dbo.O4uTbAutoDipe ON dbo.O4uTbViaggi.fkIdAutoDipe=dbo.O4uTbAutoDipe.IDAutoDipe
  13. where Format(dbo.O4uTbAutoDipe.DataModi,'yyyy-mm-dd') <= format(@DataRif,'yyyy-mm-dd')
  14. order by dbo.O4uTbAutoDipe.DataModi asc



in pratica T-sql non riusciva a confrontare le date.... convertire in stringhe nel formato corretto...


PM Quote