Как вытащить данные из Начального месяца года в данный месяц на основе значения параметра month - PullRequest
0 голосов
/ 30 сентября 2019

ЕСЛИ я выбираю @rpmMonth = СЕНТЯБРЯ 2019 года, он должен получить данные с января 2019 года по сентябрь 2019 года ** У меня есть только одно значение параметра, т.е. @rpmMonth типа VARCHAR.

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

В идеале вы должны использовать тип данных date, а не varchar. Если нам сделать , однако, придется использовать varchar, то вы можете сделать что-то вроде этого:

SELECT {Columns}
FROM {Your Schema And Table}
WHERE {DateColumn} >= CONVERT(date,CONCAT(RIGHT(@rpmMonth),'0101'))
 AND {DateColumn} < DATEADD(MONTH, 1, CONVERT(date, '01 ' + @rpmMonth));

(очевидно, заменить части в скобках ({}) и предполагает, что язык LOGIN основан на английском языке.)

Это даст вам все строки 01 января года или после 01 января года для @rpmMonthи до месяца после @rpmMonth.

Если вы используете правильную дату и передаете первую дату месяца, т. е. (2019-09-01 для образца, который вы дали), то выможет сделать следующее:

SELECT {Columns}
FROM {Your Schema And Table}
WHERE {DateColumn} >= DATEADD(YEAR, DATEDIFF(YEAR, 0, @rpmMonth),0)
  AND {DateColumn} < DATEADD(MONTH, 1, @rpmMonth);
0 голосов
/ 30 сентября 2019

SQL Server довольно хорош в преобразовании значений даты. Вы должны быть в состоянии сделать:

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 голосов
/ 30 сентября 2019
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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...