0
votes

Comment tirer des données du mois de début de l'année au mois donné en fonction de la valeur du paramètre mois

Si je sélectionne @RPMMONTH = Sep 2019, il devrait tirer les données de janvier 2019 à sept. 2019 ** Je n'ai qu'une valeur de paramètre i.e @RPMMonth de type varchar.


0 commentaires

3 Réponses :


0
votes
Declare @firstDay Date=(
select convert(varchar(10),DATEADD(Year,-1*DateDiff(Year,getdate(),0),0),120))

Declare @CurDate Date=(
SELECT convert(varchar(10),DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)),120))

select * from YOURTABLE
where colname between @firstDay  and @CurDate 

0 commentaires

0
votes

Idéalement, vous devez utiliser une date DataType, pas un varchar . Si nous faire , devons utiliser un varchar alors vous pouvez faire quelque chose comme ceci: xxx

(évidemment remplacer Les pièces d'accolades ( {} ) et suppose la langue de la connexion est une langue basée sur la langue anglaise.)

Cela vous donnerait toutes les lignes sur ou après le 01 janvier de l'année pour @RPMMonth et avant le mois après @RPMMONTH .

Si vous utilisez une date appropriée et passez la première date du mois, c'est-à-dire ( 2019-09-01 pour l'échantillon que vous avez donné), vous pourriez alors faire ci-dessous: xxx


2 commentaires

Cher Lamu, dans la ligne Convert (Date, Concat (Droite (@RPMMonth), '0101') Il lance une erreur d'arguments!


Manquer une parenthèse droite, @Lookup. (P.S. "Une erreur d'arguments" n'est pas utile; si vous obtenez une erreur, dites-nous l'erreur.)



0
votes

SQL Server est plutôt bon sur la conversion des valeurs de date. Vous devriez être capable de faire:

select . . .
from t cross join
     (values (convert(date, @rpmMonth)) as v(dte)
where datecol >= datefromparts(year(v.dte), 1, 1) and
      datecol < datefromparts(year(dateadd(month, 1, v.dte)), month(dateadd(month, 1, v.dte)), 1)


0 commentaires