ADI@345 Ответов: 5

Как посчитать отсутствие записи за определенный месяц в SQL


этот запрос подсчитывает все записи хранилища в базе данных ..мне нужно получить только запись текущего месяца ...

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

<pre>select  count(*) as present from attendance  where present='P'   and name='dummmy' and [date]>= convert(varchar(11),(DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)),105) and   [date] <=  convert(varchar(11), getdate(), 105)

5 Ответов

Рейтинг:
2

Dirk Bahle

Вопрос в том, какой сервер вы используете?
В SQL Server 2015 и более поздних версиях есть функция месяца:

<pre lang="SQL">Select Month(getdate())


Скорее всего, это должно решить вашу проблему.


ADI@345

Я использую sql server 2008..
Мой вопрос заключается в том, чтобы показать запись от первой до последней даты текущего месяца в sql

Рейтинг:
2

Pradeep Arthanari

вы можете попробовать это:

И убедитесь, что вы также добавляете год. в противном случае, если у вас есть записи за 3 года в таблице, она может в конечном итоге предоставить вам подсчет за последние 3 года за предоставленный месяц.

select  count(*) as present from attendance  where present='P'   and name='dummmy' and
 DATEPART(mm, [date]) = DATEPART(mm, getdate())
AND DATEPART(yy, [date]) = DATEPART(yy, getdate())


Рейтинг:
2

Jörgen Andersson

Вы не можете использовать EOMONTH и DATETIMEFROMPARTS, так как они прибыли с SQL Server 2012, но месяц и год пришли с SQL SERVER 2008.
Так что это должно сработать:

select  count(*) as present
from    attendance
where   present='P'
    and name='dummmy'
    AND MONTH([date]) = MONTH(SYSDATETIME)
    AND YEAR([date]) = YEAR(SYSDATETIME)
который будет работать плохо, так как он не может использовать какие-либо индексы на дату.
Но вы все равно не смогли бы использовать это, так как из вашего примера также кажется, что вы сохранили дату в виде varchar в итальянском формате.
Поэтому чтобы исправить эту ошибку нам нужно добавить преобразование:
select  count(*) as present
from    attendance
where   present='P'
    and name='dummmy'
    AND MONTH(CONVERT(DATE,[date],105)) = MONTH(SYSDATETIME)
    AND YEAR (CONVERT(DATE,[date],105)) = YEAR(SYSDATETIME)


Рейтинг:
0

Dirk Bahle

Хорошо, в этом случае попробуйте функцию datepart (), извлекающую часть месяца из datetime:

DATEPART(month, getdate())


DATEPART (Transact-SQL) | Microsoft Docs[^]


Рейтинг:
0

Balan M

Поскольку вы используете sql server 2008 , здесь я создаю запрос с помощью sql - функций month(),year()и getdate() ,

Попробуйте выполнить этот запрос

SELECT  COUNT(*) as present from attendance
WHERE  present='P'and name='dummmy' and MONTH([date]) = MONTH(GETDATE()) and
YEAR([date]) = YEAR(GETDATE())