Jαved Ответов: 6

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


Здравствуйте друзья,
я разработал одно приложение на тему "посещаемость сотрудников" , для которого я хочу рассчитать воскресенья в определенном месяце ex.november- как же это сделать? независимо от того, идет ли речь о .net или SQL, я просто хочу вычислить воскресенья.

и я хочу, чтобы он автоматически вставлял "праздник" в базу данных в эти дни. для всех сотрудников. у меня есть таблица посещаемости, в которой я взял такие поля, как attendance date, time, status(whether Present, Absent, Holiday).

я пытался вычислить в .net, а также В SQL, но это не сработало для меня.
Любая помощь будет оценена по достоинству.


Спасибо

Jαved

как автоматически вставить праздник по воскресеньям в таблицу?

6 Ответов

Рейтинг:
45

Savalia Manoj M

Вы можете попробовать это в MS-SQL, например

Declare @Month Bigint
Set @Month =11
Declare @date date;
Set @date='2011-11-01'

while DATEPART(Month,@date)=@Month
Begin
	--Select DATEPART(DAY,@date);
	--Select DATEPART( WEEKDAY, @DATE )
	DECLARE @Name VARCHAR(20)

	SELECT  @Name = CASE ( DATEPART(dw, @Date) + @@DATEFIRST ) % 7
                         WHEN 1 THEN 'Sunday'
                         WHEN 2 THEN 'Monday'
                         WHEN 3 THEN 'Tuesday'
                         WHEN 4 THEN 'Wednesday'
                         WHEN 5 THEN 'Thursday'
                         WHEN 6 THEN 'Friday'
                         WHEN 0 THEN 'Saturday'
                       END 
	If @Name='Sunday'
	Begin
		
		--Insert Data Into Your Table
		Select @date
	End
	
	Set @date=DATEADD(Day,1,@date);	
End


Selva K

Это может сработать..

Рейтинг:
28

Member 2315574

Похоже, вы хотите считать воскресенья в определенном месяце. Вы можете использовать следующий код C#.

// The year (1 through 9999).
// The month (1 through 12).
static int CountSundays(int year, int month)
{
	var firstDay = new DateTime(year,month , 1);

	var day29 = firstDay.AddDays(28);
	var day30 = firstDay.AddDays(29);
	var day31 = firstDay.AddDays(30);

	if ((day29.Month == month && day29.DayOfWeek == DayOfWeek.Sunday)
	|| (day30.Month == month && day30.DayOfWeek == DayOfWeek.Sunday)
	|| (day31.Month == month && day31.DayOfWeek == DayOfWeek.Sunday))
	{
		return 5;
	}
	else
	{
		return 4;
	}
}


------------
У Зафара
SE at TradeMeters POS Software ( http://www.TradeMeters.com )


Dalek Dave

хороший ответ.

Jαved

Это кажется полезным... можете ли вы преобразовать его в VB.
и как мне сделать так, чтобы он автоматически обновлял/ вставлял "праздник" в таблицу за месяц.

Amol111

Приятно очень

Рейтинг:
28

Jαved

Спасибо Хемант-Шарма, надеюсь, это сработает для меня. позвольте мне попробовать.

Рейтинг:
2

Member 13978324

--Я пробовал в Ms-sql

DECLARE @MONTH INT,@YEAR INT
SET @MONTH=1
SET @YEAR=2018
DECLARE @DATA TABLE
(
ID INT IDENTITY(1,1),
DATE DATE,
WEEKNAME NVARCHAR(10)
)


;WITH CTE
AS
(
SELECT 1 V
UNION ALL 
SELECT V+1 FROM CTE WHERE V+1<=DAY(EOMONTH(DATEFROMPARTS(@YEAR,@MONTH,V)))
)
INSERT INTO @DATA
SELECT DATEFROMPARTS(@YEAR,@MONTH,V),DATENAME(WEEKDAY,DATEFROMPARTS(@YEAR,@MONTH,V)) DATE FROM CTE 

SELECT count(*) cnt FROM @DATA WHERE WEEKNAME='Sunday'


CHill60

Это может быть довольно элегантное решение с дополнительной информацией - мне нравится, как вы использовали последовательность для генерации всех дат между 1-м и последним днями выбранного месяца.
Однако нет никакой необходимости в табличной переменной, если вы генерируете список дат в самом CTE.
Также стоит отметить, что это будет работать только в SQL 2012 или выше из-за использования EOMONTH - которого не было рядом, когда был задан первоначальный вопрос.
Это будет моя версия вашего решения, демонстрирующая те моменты, которые я сделал

DECLARE @Start DATE = '01-SEP-2018'
;WITH CTEAS(	
   SELECT @Start V	
   UNION ALL 	
   SELECT V = DATEADD(D, 1, V)  FROM CTE WHERE DATEADD(D, 1, V)
--			<=EOMONTH(@Start) -- SQL 2012 upward	
                       < DATEADD(MM, DATEDIFF(MM, 0, V) + 1, 0) -- SQL 2008 R2 downwards
)
SELECT count(*) cnt FROM CTE WHERE DATENAME(WEEKDAY,V) ='Sunday'

Рейтинг:
1

HMuhammad Kamran

Решение состоит в том, чтобы узнать, сколько воскресений, понедельников и т. д. В месяце.

private int GetOccuranceOfWeekday(int Year, int Month, DayOfWeek Weekday)
{
    int ReturnValue = 0;
    DateTime MyDate = new DateTime(Year, Month, 1);
    int Start = 1;
    if (Weekday != MyDate.DayOfWeek)
    {
        Start = -(MyDate.DayOfWeek - Weekday - 1);
        if (Start <= 0)
        {
            ReturnValue = -1;
        }

    }
    while (Start <= DateTime.DaysInMonth(Year, Month))
    {
        ReturnValue += 1;
        Start += 7;
    }
    return ReturnValue;
}


Просто назовите это как.

MessageBox.Show(string.Format("There are {0} Saturdays in September 2013", GetOccuranceOfWeekday(2013, 9, DayOfWeek.Saturday)));


Это Может Помочь.


Рейтинг:
0