[ad_1]
je dois enregistrer toutes les lignes des 30 dernières à aujourd’hui. j’ai essayé ça mais ça ne marche pas
Ce que j’ai essayé :
sélectionnez date_time à partir de dsr_data où date_time >= CONVERT(Varchar(100), DATEADD(DAY,-30,GETDATE()),103) et date_time <= CONVERT(varchar(100), getdate(),103)
Solution 3
SELECT date_time FROM dsr_data WHERE date_time between DATEADD(DAY,-30,GETDATE()) and GETDATE();
Solution 1
Pourquoi utilisez-vous CONVERT ?
La seule raison possible est la même pour laquelle cela ne fonctionne pas : vous stockez vos dates sous forme de colonnes NVARCHAR au lieu de DATE, DATETIME ou DATETIME2.
Lorsque vous comparez des chaînes, la comparaison est entièrement basée sur le premier caractère différent des deux chaînes : et puisque vous choisissez spécifiquement de formater la date au format 103, qui est “jj/MM/aaaa”, la comparaison sera totalement inutile – l’année sera vérifiée en dernier lieu par exemple, donc le 31/01/2017 sera avant le 31/12/1952 car la comparaison se fera sur le premier chiffre du mois, et ‘0’ est inférieur à ‘1’
Changez votre base de données. Stockez toujours les données dans les types de données appropriés : cela signifie des valeurs entières dans les colonnes INT, des informations de date dans les colonnes DATE, DATETIME ou DATETIME2, etc. Si vous ne le faites pas, ce n’est que le premier d’une longue liste de problèmes très désagréables qui vous attendent sur toute la ligne…
Solution 2
Utilisez la requête ci-dessous.
SELECT date_time FROM dsr_data WHERE date_time >= DATEADD(day,-30, getdate()) and date_time <= getdate()
[ad_2]
コメント