Member 11850495 Ответов: 1

Что касается этого SQL-запроса, то как я могу вывести список из 28/30/31 дней в соответствии с выбором пользователем определенного месяца и года


Проблема в том, что я застрял на том, как вывести 28/30/31 дней в соответствии с выбором пользователем определенного месяца и года, вот мой код:

Что я уже пробовал:

declare @FromDate as datetime;
declare @ToDate as datetime;
declare @OperID as varchar(20) = 'OP1';
declare @Year as int = 2018
declare @Month as int = 1

set @FromDate = convert(date,convert(varchar,@Year) + '-' + convert(varchar,@Month) + '-01')
set @ToDate = dateadd(d,-1,DATEADD(m, 1, @FromDate))

select Branch_no, operid, clock_date, [I], [O]
from
( select Branch_no, operid, 
    convert(date, clock_date) as clock_date, 
    convert(time, clock_date) as clock_time, 
    clock_type, Workstation_no
  from ROSTER_TIMECLOCK
  where Clock_date >=CONVERT(DATETIME, @FromDate, 102)
    and Clock_date <=CONVERT(DATETIME, @ToDate, 102)
    and OperID=@OperID
) as TheClock
PIVOT
( min(clock_time)
  FOR clock_type in ([I],[O])
) as ThePivot 

RedDk

Qu'est-ce que c'est "ROSTER_TIMECLOCK"?

Member 11850495

ROSTER_TIMECLOCK-это таблица, в которой я выполняю запрос.

Richard Deeming

@FromDate и @ToDate уже есть datetime ценности, так что в этом нет необходимости CONVERT их.

Кроме этого, я не вижу в вашем коде ничего, что могло бы генерировать фиксированное количество дней. Вы выбираете все записи, которые попадают в течение месяца, так в чем же проблема?

Herman&lt;T&gt;.Instance

--> WHERE MONTH(Clock_Date) = @Month AND YEAR(Clock_Date) = @Year AND OperID=@OperID


Затем вы выбираете все месячные данные за данный год, так что 28/29/30 или 31 день-это не проблема!

Member 11850495

Благодарю вас сэр

1 Ответов

Рейтинг:
1

Member 13672047

declare @Year as int = 2018
declare @Month as int = 1
select day(dateadd(dd,-1,dateadd(mm,1,datefromparts(@Year,@Month,1))))


Richard Deeming

DateFromParts[^] был добавлен в SQL Server 2012. В то же время они добавили: функция eomonth[^] чтобы получить последний день месяца, что немного упростило бы ваш код. :)

SELECT Day(EOMonth(DateFromParts(@Year, @Month, 1)))