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: 131
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: 1257
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: 6362
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: 6362
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