[SQL] 어떻게 SQL Server의 공휴일을 결정합니까?
SQL어떻게 SQL Server의 공휴일을 결정합니까?
나는 공휴일이나 주말에 실행할 수 없습니다 C #으로 작성된 응용 프로그램이 있습니다. 나는 조금 주위를 검토 한 다음 말 50 년 동안 모든 공휴일을 제공하는 어느 곳 (공식) 발견하지 않았습니다.
나는이를 얻을 수 있다면, 나는 것입니다 단지 내 SQL 서버 휴일 테이블과 사용이로 삽입 대량. 그러나, 나는이 데이터 어디를 찾을 수 없습니다.
SQL Server가 공휴일에 대한 지원하거나 해결하기 위해 어떤 종류의 알고리즘이있는 경우 사람의 노하우를합니까? 또는 사람이 어떻게에서 대량 삽입을 할 수있는 곳 공식을 가지고있다.
해결법
-
==============================
1.난 그냥 인터넷을 통해 정보를 수집하고 나는 미국 은행 휴일을 계산이 쉬운 방법이 제공됩니다.
난 그냥 인터넷을 통해 정보를 수집하고 나는 미국 은행 휴일을 계산이 쉬운 방법이 제공됩니다.
DECLARE @Year char(4) , @Date datetime , @Holiday datetime SET @Year = 2010 ---- New Years Day SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-01-01' ) IF DATENAME( dw, @Date ) = 'Saturday' SET @Date=@Date-1 ELSE IF DATENAME( dw, @Date ) = 'Sunday' SET @Date=@Date+1 SELECT @Date [New Years Day], DATENAME( dw, @Date ) [DayOfWeek] ---- Martin L King's Birthday ( 3rd Monday in January ) SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-01-01' ) SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 18-datepart( day, @Date ), @Date ) ), 0 ) -- 3rd Monday of the Month SELECT @Holiday [Martin L King's Birthday], DATENAME( dw, @Holiday ) [DayOfWeek] ---- President’s Day ( 3rd Monday in February ) SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-02-01' ) SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 18-datepart( day, @Date ), @Date ) ), 0 ) -- 3rd Monday of the Month SELECT @Holiday [President’s Day], DATENAME( dw, @Holiday ) [DayOfWeek] ---- Memorial Day ( Last Monday in May ) SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-05-01' ) SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 30-datepart( day, @Date ), @Date ) ), 0 ) -- 5th Monday of the Month SELECT @Holiday [Memorial Day], DATENAME( dw, @Holiday ) [DayOfWeek] ---- Independence Day ( July 4 ) SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-07-04' ) IF DATENAME( dw, @Date ) = 'Saturday' SET @Date=@Date-1 ELSE IF DATENAME( dw, @Date ) = 'Sunday' SET @Date=@Date+1 SELECT @Date [Independence Day], DATENAME( dw, @Date ) [DayOfWeek] ---- Labor Day ( 1st Monday in September ) SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-09-01' ) SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 6-datepart( day, @Date ), @Date ) ), 0 ) -- 1st Monday of the Month SELECT @Holiday [Labor Day], DATENAME( dw, @Holiday ) [DayOfWeek] ---- Columbus Day ( 2nd Monday in October ) SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-10-01' ) SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 12-datepart( day, @Date ), @Date ) ), 0 ) -- 2nd Monday of the Month SELECT @Holiday [Columbus Day], DATENAME( dw, @Holiday ) [DayOfWeek] ---- Veteran’s Day ( November 11 ) SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-11-11' ) IF DATENAME( dw, @Date ) = 'Saturday' SET @Date=@Date-1 ELSE IF DATENAME( dw, @Date ) = 'Sunday' SET @Date=@Date+1 SELECT @Date [Veteran’s Day], DATENAME( dw, @Date ) [DayOfWeek] ---- Thanksgiving Day ( 4th Thursday in November ) SET @Date = CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-11-04' ) SET @Holiday = DATEADD( wk, DATEDIFF( wk, 0, dateadd( dd, 22-datepart( day, @Date ), @Date ) ), 0 )+3 -- 4th Thursday of the Month SELECT @Holiday [Thanksgiving Day], DATENAME( dw, @Holiday ) [DayOfWeek] ---- Christmas Day ( December 25 ) SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-12-25' ) IF DATENAME( dw, @Date ) = 'Saturday' SET @Date=@Date-1 ELSE IF DATENAME( dw, @Date ) = 'Sunday' SET @Date=@Date+1 SELECT @Date [Christmas Day], DATENAME( dw, @Date ) [DayOfWeek] ---- New Years Eve Day SET @Date=CONVERT( datetime, CONVERT(varchar, YEAR( @Year ) )+'-12-31' ) IF DATENAME( dw, @Date ) = 'Saturday' SET @Date=@Date-1 ELSE IF DATENAME( dw, @Date ) = 'Sunday' SET @Date=@Date+1 SELECT @Date [New Years Day], DATENAME( dw, @Date ) [DayOfWeek]
-
==============================
2.내가 아는 어떤 '공식'소스가없는,이 참 로케일에 크게 의존한다. 이러한 수동으로 관리해야 할 것이다. 좋은 소스는 것 같다 :
내가 아는 어떤 '공식'소스가없는,이 참 로케일에 크게 의존한다. 이러한 수동으로 관리해야 할 것이다. 좋은 소스는 것 같다 :
http://en.wikipedia.org/wiki/List_of_holidays_by_country
심지어 이러한 상황은 관리하기가 매우 까다로운. 예를 들어, 내가 벨기에에 살고, 그리고 국가의 다른 부분은 다른 휴일이있다. 예를 들어 정부 노동자는 노동 인구의 나머지 부분에 비해 다른 공휴일을 가지고 있고,이 같은 로케일 코드입니다.
-
==============================
3.공휴일은 로케일에 매우 의존하지 않는가요?
공휴일은 로케일에 매우 의존하지 않는가요?
프로그래밍이를 계산하는 방법이 없습니다. 또는, 당신은 당신의 로케일의 각 휴일의 공식 목록을 찾을 필요가있을 것이다. 그리고 그럼에도 불구하고, 당신은 당신이 원하는 입도을받지 않습니다.
-
==============================
4.우리의 응용 프로그램에서 우리는 사용자 구성의 그 부분이있다. 그들은 먼 미래에 그들이 원하는만큼 공공 / 은행 휴일을 고려 무엇 세트에 사용자를위한 장소가있다. 사용의 용이성을 위해 작년부터 날짜별로 복사 할 수있는 기능이있다. 이것은 또한 세트 '사용자 정의'공공 holdays, 휴가 등 회사의 취급이 있지만 natioanlly 공식 아니라고 아마도 하루에 수 ...
우리의 응용 프로그램에서 우리는 사용자 구성의 그 부분이있다. 그들은 먼 미래에 그들이 원하는만큼 공공 / 은행 휴일을 고려 무엇 세트에 사용자를위한 장소가있다. 사용의 용이성을 위해 작년부터 날짜별로 복사 할 수있는 기능이있다. 이것은 또한 세트 '사용자 정의'공공 holdays, 휴가 등 회사의 취급이 있지만 natioanlly 공식 아니라고 아마도 하루에 수 ...
, 프로그램, 그러나, 전혀 전혀 가정이 없습니다. 그것은 효과적으로 날짜의 단지 사용자 유지 테이블입니다.
(위에서 언급 한 바와 같이, 일부 공휴일은 다양하며 돌에 설정되지 않은, 때로는 일 일회성 특별 있기 때문에 이것은 영국이 포함되어 있습니다.)
-
==============================
5.공휴일은 향후 50 년 동안 거의 사용할 수 있습니다. 일부 국가에서는 그들은, 앞으로 몇 년으로 알려져 일부 국가에서하지 않습니다. 또한 주와도 도시에 따라 달라집니다.
공휴일은 향후 50 년 동안 거의 사용할 수 있습니다. 일부 국가에서는 그들은, 앞으로 몇 년으로 알려져 일부 국가에서하지 않습니다. 또한 주와도 도시에 따라 달라집니다.
-
==============================
6.이 사용할 수있는 웹 서비스가 제공됩니다 -
이 사용할 수있는 웹 서비스가 제공됩니다 -
http://www.holidaywebservice.com/Holidays/servicesAvailable_HolidayService.aspx
-
==============================
7.당신은 계산 공휴일에 대한 사용자 Nager.Date 라이브러리를 할 수 있습니다. https://github.com/nager/Nager.Date
당신은 계산 공휴일에 대한 사용자 Nager.Date 라이브러리를 할 수 있습니다. https://github.com/nager/Nager.Date
너겟
PM> install-package Nager.Date
예:
var publicHolidays = DateSystem.GetPublicHoliday(CountryCode.GB, 2017); foreach (var publicHoliday in publicHolidays) { var name = publicHoliday.LocalName; }
-
==============================
8.아, 휴일 캘린더. 어떤 투자 은행 프로그래머의 삶의 베인. 자신의 목록을 유지 이외의 그 일을 할 방법이 없다, 난 두려워!
아, 휴일 캘린더. 어떤 투자 은행 프로그래머의 삶의 베인. 자신의 목록을 유지 이외의 그 일을 할 방법이 없다, 난 두려워!
-
==============================
9.당신은 이것에 대한 휴일 테이블을 유지해야 할 것입니다. 심지어는 보편적되지 않기 때문에 적절한 국제화를 들어, 당신도 주말이를 위해있는 일 유지해야합니다. 프로그램은 런던에서 사용자가 떨어져 일을 알고 있지만, 터키에서 사용자가하지 않도록 마찬가지로, 당신은 로케일 휴일을 유지해야 할 수도 있습니다.
당신은 이것에 대한 휴일 테이블을 유지해야 할 것입니다. 심지어는 보편적되지 않기 때문에 적절한 국제화를 들어, 당신도 주말이를 위해있는 일 유지해야합니다. 프로그램은 런던에서 사용자가 떨어져 일을 알고 있지만, 터키에서 사용자가하지 않도록 마찬가지로, 당신은 로케일 휴일을 유지해야 할 수도 있습니다.
이것은 사용자가 완벽하게 구성해야합니다. 당신이 알다시피, 회사 소유자의 생일은 떨어져 "표준"일 수 있습니다. 웹에 그 휴가를 찾아보십시오.
마지막으로, 당신은 휴가 데이터의 50 년의 가치를 저장하지 않습니다. 그것은 단지 부정확하고 잠재적으로 느린 모든 코드 다운 될 것입니다.
-
==============================
10.미국에서 우리의 많은 것을 위해, 결정 론적으로 계산 될 수있는 비즈니스 휴일의 표준 목록이 있습니다.
미국에서 우리의 많은 것을 위해, 결정 론적으로 계산 될 수있는 비즈니스 휴일의 표준 목록이 있습니다.
Vonpato의 코드에서 영감을 그리기, 나는 차종은 윈도우 함수의 사용을 함께 하나의 SQL 문을 넣어 (기준 (이상 파티션을 ..)), 새를 SQL Server 2008에서 N 번째 또는 한 달 내 평일의 마지막 발생을 결정하는 .
이 같은 데이터웨어 하우스에서 발견 "DimDate"표준 날짜 차원 테이블에 대해 실행해야합니다. http://www.codeproject.com/Articles/647950/Create-and-Populate-Date-Dimension-for-Data-Wareho
SELECT case when DayNameOfWeek = 'Saturday' then dateadd(day, -1, FullDate) when DayNameOfWeek = 'Sunday' then dateadd(day, 1, FullDate) else FullDate end as 'Holiday Date' FROM ( select row_number() over (partition by DayNameOfWeek, MonthOfYear, CalendarYear order by FullDate) as WeekdayOrdinal, count(*) over (partition by DayNameOfWeek, MonthOfYear, CalendarYear ) as MaxOrdinal, * from DimDate ) D WHERE (D.[MonthName] = 'January' and [DayOfMonth] = 1) /* New Years Day */ OR (D.[MonthName] = 'January' and DayNameOfWeek = 'Monday') and WeekdayOrdinal = 3 /* MLK Day */ OR (D.[MonthName] = 'February' and DayNameOfWeek = 'Monday') and WeekdayOrdinal = 3 /* President's Day */ OR (D.[MonthName] = 'May' and DayNameOfWeek = 'Monday') and WeekdayOrdinal = MaxOrdinal /* Memorial Day */ OR (D.[MonthName] = 'September' and DayNameOfWeek = 'Monday') and WeekdayOrdinal = 1 /* Labor Day */ OR (D.[MonthName] = 'October' and DayNameOfWeek = 'Monday') and WeekdayOrdinal = 2 /* Columbus Day */ OR (D.[MonthName] = 'November' and [DayOfMonth] = 11) /* Veteran's Day */ OR (D.[MonthName] = 'November' and DayNameOfWeek = 'Thursday') and WeekdayOrdinal = 4 /* Thanksgiving */ OR (D.[MonthName] = 'December' and [DayOfMonth] = 25 ) /* Christmas */ ORDER BY FullDate
-
==============================
11.그냥 잉글랜드의 경우에, 당신은 자신을 위해 그들을 사용할 수 있습니다! 당신은 부활절을 결정하기위한 신뢰할 수있는 알고리즘을 얻을해야하지만, 그렇지 않으면 난 당신이 한 시간에서 그것을에서 할 수 말할 것입니다.
그냥 잉글랜드의 경우에, 당신은 자신을 위해 그들을 사용할 수 있습니다! 당신은 부활절을 결정하기위한 신뢰할 수있는 알고리즘을 얻을해야하지만, 그렇지 않으면 난 당신이 한 시간에서 그것을에서 할 수 말할 것입니다.
그러나 당신은 영국에, 또는 영국을 의미합니까? 스코틀랜드 다른 공휴일이 있기 때문에 (크리스마스, 섣달 그믐 밤 세인트 앤드류의 날), 북 아일랜드, 웨일즈, 인간과 채널 제도의 가장 가능성이 섬은 다른 거래해야한다.
다른 곳에서 언급 한 바와 같이 귀하의 범위가 넓은 도착하면, 그것은 훨씬 더 복잡하다. 은행이 열리지하지만 증권 거래소 할 때 현지 공휴일, 반 - 일, 일 공포의 모든 종류가 있습니다.
당신이 정말로 휴일을 직접 관리 할 수과 책임을 부여 할 수있는 사용자가없는 경우에, 나는 당신의 "공휴일에서 실행할 수 없습니다"제약 조건 등을 진행하고이 될 수있는 방법을 찾는 게 좋을 것 제거 ...
-
==============================
12.추수 감사절 11 월의 마지막 목요일을 찾는 데 문제가 사람들을 위해, 나는 다음 마이너스 하루에 WHILE () 루프를 사용하고 DATENAME 목요일 때까지 DATENAME을 확인 달의 마지막 날을 찾아 시작합니다
추수 감사절 11 월의 마지막 목요일을 찾는 데 문제가 사람들을 위해, 나는 다음 마이너스 하루에 WHILE () 루프를 사용하고 DATENAME 목요일 때까지 DATENAME을 확인 달의 마지막 날을 찾아 시작합니다
DECLARE @LastThursday DateTime = DATEADD(s,-1,DATEADD(mm,DATEDIFF(m,0,CONVERT(datetime,CONVERT(varchar,YEAR(GETDATE()))+'-11-01'))+1,0)) WHILE DATENAME(weekday,@LastThursday) <> 'Thursday' BEGIN SET @LastThursday = DATEADD(day,DATEDIFF(day,0,@LastThursday)-1,0) END SELECT @LastThursday
-
==============================
13.가져올 달력을 선택하거나 가입하는 사용자를 허용하는 경우 일 휴일을 어떤 구성을 사용자에게 허용하는 이외에, 그것은 좋은 것입니다. iCalShare 좋은 목록을 가지고있다. 그러나, 그것은 단지 좋다 기능에 대한 너무 많은 작업은 아마.
가져올 달력을 선택하거나 가입하는 사용자를 허용하는 경우 일 휴일을 어떤 구성을 사용자에게 허용하는 이외에, 그것은 좋은 것입니다. iCalShare 좋은 목록을 가지고있다. 그러나, 그것은 단지 좋다 기능에 대한 너무 많은 작업은 아마.
-
==============================
14.다른 사람들이 이미 테이블에 자신의 퍼팅을하기의 유일한 방법입니다 말한 추가합니다. 전형적인 예는 여왕의 50 주년에 대한 별도의 공휴일입니다. 이것은 단지 사전에 몇 년을 발표하고, 당신이 그것을 사전에 오십년을 가질 수있는 방법이 없었다.
다른 사람들이 이미 테이블에 자신의 퍼팅을하기의 유일한 방법입니다 말한 추가합니다. 전형적인 예는 여왕의 50 주년에 대한 별도의 공휴일입니다. 이것은 단지 사전에 몇 년을 발표하고, 당신이 그것을 사전에 오십년을 가질 수있는 방법이 없었다.
이 때문에 상용 서비스의 수는 신뢰할 수있는 방법이 데이터를 제공하기 위해 존재한다. 하나는 GoodBusinessDay.com하지만 나는 그것과 경험이 없다.
-
==============================
15.구글 캘린더 공휴일 어쩌면 당신은 구글 캘린더 웹 서비스를 해당 국가 / 지역의 데이터를 검색 할 수 있습니다.
구글 캘린더 공휴일 어쩌면 당신은 구글 캘린더 웹 서비스를 해당 국가 / 지역의 데이터를 검색 할 수 있습니다.
-
==============================
16.주장 일정 게시자가 사용하는 전세계 공휴일에 대한 다른 서비스를 찾을 수 :
주장 일정 게시자가 사용하는 전세계 공휴일에 대한 다른 서비스를 찾을 수 :
http://www.qppstudio.net/index.htm
-
==============================
17.이 알고리즘은 기독교 공휴일을 준수 국가에서 수동 구성의 양을 줄일 수 있습니다. C 번호로 변환 사소한해야합니다
이 알고리즘은 기독교 공휴일을 준수 국가에서 수동 구성의 양을 줄일 수 있습니다. C 번호로 변환 사소한해야합니다
http://en.wikipedia.org/wiki/Computus#Anonymous_Gregorian_algorithm
-
==============================
18.금융 기관은 다양한 로케일 달력을 은행에 정기적 인 업데이트를 제공하는 서비스에 가입됩니다.
금융 기관은 다양한 로케일 달력을 은행에 정기적 인 업데이트를 제공하는 서비스에 가입됩니다.
은행 휴일 및 일반 공휴일 차이가 종종 있다는 것을 유의하십시오. 미국에서이의 예는 연방 정부 7 월 3 일 휴일을 인정하지만 뉴욕의 연방 준비 은행이 열려이 통과 독립 기념일입니다.
2009 미국 연방 휴일
2009 미국 연방 준비 은행 휴일
-
==============================
19.그것이 내가 텍스트 파일이 도움이된다면 모든 전공 및 부전공 금융 센터에 대해 정의 된 은행 휴일을 계산하기위한 목록 규칙이. 이 정의의 일반적인 방법은 런던, 뉴욕, 프랑크푸르트로, 비즈니스 센터 등 등이 아닌 국가입니다. 여기 예를 들어 규칙과 런던에 대한 설명과 몇 가지 다른입니다. 하나가 원하는 경우 전체 많이 알려주세요. 이 많은 빨라야 2030까지 1990에서 작동합니다. 분명히 그것은 FLES가 (2006 년 나는 생각한다) 조립 후 발표 한 새로운 휴일이 없습니다.
그것이 내가 텍스트 파일이 도움이된다면 모든 전공 및 부전공 금융 센터에 대해 정의 된 은행 휴일을 계산하기위한 목록 규칙이. 이 정의의 일반적인 방법은 런던, 뉴욕, 프랑크푸르트로, 비즈니스 센터 등 등이 아닌 국가입니다. 여기 예를 들어 규칙과 런던에 대한 설명과 몇 가지 다른입니다. 하나가 원하는 경우 전체 많이 알려주세요. 이 많은 빨라야 2030까지 1990에서 작동합니다. 분명히 그것은 FLES가 (2006 년 나는 생각한다) 조립 후 발표 한 새로운 휴일이 없습니다.
/* * This file describes holiday calendars in the following way: * 1. The "n"th "dow" in the month "m", means the 3rd Wednesday in August = "ALWAYS,3,WED,AUG" * 2. The last etc "dow" in month "m", e.g. the last Monday in June = "LAST,MON,JUN" * 3. A set date which if on a Sat or Sun is taken on the Monday, eg 13th Aug. = "FWDFROM,13,AUG" * 4. A set date which if on a Sat is taken on Fri, if Sun on the Mon = "CLOSESTTO,13,AUG" * 5. A set date which, if on a Sat is unchanged, but if a Sun is taken on the Mon = "FWDFROMSUN,13,AUG" * 6. A set date which is unchanged if it happens to be on a weekend = "REMAINS,13,AUG" * 7. The first day on or after day "x" in month "m" e.g. 1st Monday on or after 16th Jan = "FIRSTAFTER,16,MON,JAN" * 8. A holiday which is a set number of days relative to Easter Sunday, e.g Easter Monday = "EASTER,1" * 9. A holiday on one specified date only. e.g. 13th Aug 1997 = "ONEOFF,13,AUG,1997" * 10.A specific date which has been added but is not a holiday and must be removed. = "REMOVE,13,AUG,1997" * Note REMOVE only works on a date which is already in the calendar: you cannot remove a date which is yet to be added. * If there is any text after the definition of the holiday it will appear in the date calendar description, * e.g. you can have "FWDFROM,25,DEC,Christmas Day", if you wish. */ LON: HolidayCalendar { Config: String { FWDFROM,1,JAN,New Year's Day; EASTER,-2,Good Friday; EASTER,1,Easter Monday; ALWAYS,1,MON,MAY,Early May Bank Holiday; LAST,MON,MAY,Spring Bank Holiday; REMOVE,27,MAY,2002,Spring Bank Holiday; ONEOFF,3,JUN,2002,Spring Bank Holiday; ONEOFF,4,JUN,2002,Spring Bank Holiday; LAST,MON,AUG,Summer Bank Holiday; FWDFROM,25,DEC,Christmas; FWDFROM,26,DEC,Boxing Day; ONEOFF,31,DEC,1999,Millenium; } EndDate: 31-Dec-2030; Name: London; StartDate: 01-Jan-1990; Weekend: SAT,SUN,; } HKG: HolidayCalendar { Config: String { FWDFROM,1,JAN,New Year's Day; ONEOFF,16,FEB,1999,Chinese New Year; ONEOFF,17,FEB,1999,Chinese New Year; ONEOFF,18,FEB,1999,Chinese New Year; FWDFROM,5,FEB,2000,Chinese New Year; FWDFROM,6,FEB,2000,Chinese New Year; FWDFROM,7,FEB,2000,Chinese New Year; CLOSESTTO,5,APR,Ching Ming; EASTER,-2,Good Friday; EASTER,1,Easter Monday; FWDFROM,1,MAY,Labour Day; ONEOFF,18,JUN,1999,Dragon Boat Festival; FWDFROM,1,JUL,SAR Establishment Day; FWDFROM,1,OCT,National Day; FWDFROM,2,OCT,National Day; ONEOFF,25,SEP,1999,Mid Autumn Festival; ONEOFF,17,OCT,1999,Chung Yeung; FWDFROM,25,DEC,Christmas; FWDFROM,26,DEC,Boxing Day; ONEOFF,4,MAY,1998,May bank holiday; ONEOFF,25,MAY,1998,May bank holiday; ONEOFF,3,MAY,1999,May bank holiday; ONEOFF,31,MAY,1999,May bank holiday; ONEOFF,1,JUL,1997; ONEOFF,2,JUL,1997; } EndDate: 31-Dec-2030; Name: Hong Kong; StartDate: 01-Jan-1990; Weekend: SAT,SUN,; } MIL: HolidayCalendar { Config: String { FWDFROM,1,JAN,New Year's Day; REMAINS,6,JAN,Epiphany; REMAINS,25,APR,Liberation Day; REMAINS,1,MAY,May Day; REMAINS,15,AUG,Assumption; REMAINS,1,NOV,All Saint's; REMAINS,8,DEC,Immaculate Conception; EASTER,1,Easter Monday; FWDFROM,25,DEC,Christmas; FWDFROM,26,DEC,Boxing Day; } EndDate: 31-Dec-2030; Name: Milan; StartDate: 01-Jan-1990; Weekend: SAT,SUN,; } FFT: HolidayCalendar { Config: String { REMAINS,1,JAN,New Year's Day; EASTER,-2,Good Friday; EASTER,1,Easter Monday; REMAINS,1,MAY,Labour Day; EASTER,39,Ascension Day; EASTER,50,Whit Monday; EASTER,60,Corpus Christi; REMAINS,3,OCT,Day of German Unity; REMAINS,24,DEC,Christmas Eve; REMAINS,25,DEC,Christmas Day; REMAINS,26,DEC,Boxing Day; } EndDate: 31-Dec-2030; Name: Frankfurt; StartDate: 01-Jan-1990; Weekend: SAT,SUN,; } ZUR: HolidayCalendar { Config: String { REMAINS,1,JAN,New Year's Day; REMAINS,2,JAN,New Year's Holiday; EASTER,-2,Good Friday; EASTER,1,Easter Monday; EASTER,39,Ascension Day; EASTER,50,Whit Monday; REMAINS,1,AUG,August Bank Holiday; REMAINS,1,MAY, LABOUR DAY; REMAINS,25,DEC,Christmas; REMAINS,26,DEC,Boxing Day; } EndDate: 31-Dec-2030; Name: Zurich; StartDate: 01-Jan-1990; Weekend: SAT,SUN,; } NYK: HolidayCalendar { Config: String { REMAINS,1,JAN,New Year's Day; ALWAYS,3,MON,JAN,Martin Luther King; ALWAYS,3,MON,FEB,President's Day; LAST,MON,MAY,Memorial Day; CLOSESTTO,4,JUL,Independence Day; ALWAYS,1,MON,SEP,Labor Day; ALWAYS,2,MON,OCT,Columbus Day; REMAINS,11,NOV,Veteran's Day; ALWAYS,4,THU,NOV,Thanksgiving; FWDFROMSUN,25,DEC,Christmas Day; ONEOFF,12,NOV,2001,Veteran's Day; } EndDate: 31-Dec-2030; Name: New York; StartDate: 01-Jan-1990; Weekend: SAT,SUN,; }
-
==============================
20.부활절 휴일 깊어의 일부 국가에서는 (즉, 폴란드) 번호입니다.
부활절 휴일 깊어의 일부 국가에서는 (즉, 폴란드) 번호입니다.
이 게시물의 끝에서 당신은에 따라 계산 먹는 날짜와 몇 휴일에 코드를 찾을 수 있습니다.
등 즉 1 월 1 일, 크리스마스 휴일, 독립 기념일입니다 비 이동 휴일, 테이블 어딘가에 저장 될 수 있습니다.
번호 국가에서이 지역을 명심 / 추가 공휴일이있을 수 있지만 국가 또는 지역에 대한 모든 휴일을 계산하는 상태가 가능해야한다.
영국 즉 당신은 당신이 당신의 코드에서 사용할 수있는 몇 가지 규칙이 은행 휴일이있다. - 월의 첫 번째 월요일 - 월의 마지막 월요일 - 8 월 등의 마지막 월요일
자세한 내용은이 링크를 확인하시기 바랍니다 http://en.wikipedia.org/wiki/Public_holidays_in_the_United_Kingdom
어떻게 SQL에서 부활절 날짜를 계산하는 방법 :
http://www.smart.net/~mmontes/nature1876.html
http://ghiorzi.org/easterda.htm
declare @a int declare @b int declare @c int declare @d int declare @e int declare @f int declare @g int declare @h int declare @i int declare @j int declare @k int declare @l int declare @m int declare @n int declare @Year int declare @Month int declare @Day int declare @EasterSunday datetime declare @EasterMonday datetime declare @Pentecost datetime declare @CorpusChristi datetime SET @Year = 2014 SET @a = @Year%19; SET @b = @Year/100; SET @c = @Year%100; SET @d = @b/4; SET @e = @b%4; SET @f = @c/4; SET @g = @c%4; SET @h = (@b + 8)/25; SET @i = (@b - @h + 1)/3; SET @j = (19*@a + @b - @d - @i + 15) % 30; SET @k = (32 + 2*@e + 2*@f - @j - @g) % 7; SET @m = (@a + 11*@j + 22*@k) / 451; SET @n = @j + @k - 7*@m + 114; SET @Month = @n/31; SET @Day = (@n % 31) + 1; --PRINT @Year --PRINT @Month --PRINT @Day SET @EasterSunday = dateadd(month,((@Year-1900)*12)+@Month-1,@Day-1) SET @EasterMonday = dateadd(day,1,@EasterSunday) SET @Pentecost = dateadd(day,49,@EasterSunday) SET @CorpusChristi = dateadd(day,60,@EasterSunday) PRINT 'Easter Sunday: ' + CONVERT(VARCHAR, @EasterSunday,120) + ' [' + DATENAME(dw, @EasterSunday) + ']' PRINT '' PRINT 'Easter Monday: ' + CONVERT(VARCHAR, @EasterMonday,120) + ' [' + DATENAME(dw, @EasterMonday) + ']' PRINT '' PRINT 'Pentecost: ' + CONVERT(VARCHAR, @Pentecost,120) + ' [' + DATENAME(dw, @Pentecost) + ']' PRINT '' PRINT 'CorpusChristi: ' + CONVERT(VARCHAR, @CorpusChristi,120) + ' [' + DATENAME(dw, @CorpusChristi) + ']' PRINT ''
-
==============================
21.의이 단순화 보자 :
의이 단순화 보자 :
case -- New Year's Day when DATEPART(MM, @DATE) = 1 and DATEPART(DD, @DATE) = 1 and DATEPART(DW, @DATE) in (2,3,4,5,6) then 'Y' when DATEPART(MM, @DATE) = 12 and DATEPART(DD, @DATE) = 31 and DATEPART(DW, @DATE) = 6 then 'Y' when DATEPART(MM, @DATE) = 1 and DATEPART(DD, @DATE) = 2 and DATEPART(DW, @DATE) = 2 then 'Y' -- Memorial Day (last Monday in May) when DATEPART(MM, @DATE) = 5 and DATEPART(DD, @DATE) between 25 and 31 and DATEPART(DW, @DATE) = 2 then 'Y' -- Independence Day when DATEPART(MM, @DATE) = 7 and DATEPART(DD, @DATE) = 4 and DATEPART(DW, @DATE) in (2,3,4,5,6) then 'Y' when DATEPART(MM, @DATE) = 7 and DATEPART(DD, @DATE) = 3 and DATEPART(DW, @DATE) = 6 then 'Y' when DATEPART(MM, @DATE) = 7 and DATEPART(DD, @DATE) = 5 and DATEPART(DW, @DATE) = 2 then 'Y' -- Labor Day (first Monday in September) when DATEPART(MM, @DATE) = 9 and DATEPART(DD, @DATE) between 1 and 7 and DATEPART(DW, @DATE) = 2 then 'Y' -- Thanksgiving Day (fourth Thursday in November) when DATEPART(MM, @DATE) = 11 and DATEPART(DD, @DATE) between 22 and 28 and DATEPART(DW, @DATE) = 5 then 'Y' -- Black Friday (day after Thanksgiving) when DATEPART(MM, @DATE) = 11 and DATEPART(DD, @DATE) between 23 and 29 and DATEPART(DW, @DATE) = 6 then 'Y' -- Christmas Day when DATEPART(MM, @DATE) = 12 and DATEPART(DD, @DATE) = 25 and DATEPART(DW, @DATE) in (2,3,4,5,6) then 'Y' when DATEPART(MM, @DATE) = 12 and DATEPART(DD, @DATE) = 24 and DATEPART(DW, @DATE) = 6 then 'Y' when DATEPART(MM, @DATE) = 12 and DATEPART(DD, @DATE) = 26 and DATEPART(DW, @DATE) = 2 then 'Y' else 'N' end
-
==============================
22.영국의 은행 휴일은 대부분 계산할 수 있지만, 확실히 모든 계산할 수 없습니다.
영국의 은행 휴일은 대부분 계산할 수 있지만, 확실히 모든 계산할 수 없습니다.
영국 정부는이 정보를 제공하는 API (https://www.gov.uk/bank-holidays.json)를 제공합니다.
-
==============================
23.나는이 주제에 이상한 찾을 수 있습니다. 찾아 MS, PHP 또는 나는 그것이 무의미 운동이라는 결론에 도달이 경우 SQL 언어의 복잡한 함수를 작성하려고 후. 나는 결국 코드는 이상 2,000 문자를 포함하고 오른쪽 디버그 얻을 시간이 걸립니다. 당신이 그것에 대해 생각하는 경우에 당신이해야 할 다음 100 년 동안 매년 각 휴가를 하루 1-365 및 행을 나타내는 7 숫자는 쓰기를합니다. 당신은 그 세 번 다음 년의 휴일을로드해야합니다. 그래서 일곱 개 기둥과 100 개의 행을 가진 테이블을 유지하고 올바른 일로를 입력합니다. 당신은 모든 백년 후에이 작업을 수행하고 적은 시간 이상 수행해야하며 휴대용이다.
나는이 주제에 이상한 찾을 수 있습니다. 찾아 MS, PHP 또는 나는 그것이 무의미 운동이라는 결론에 도달이 경우 SQL 언어의 복잡한 함수를 작성하려고 후. 나는 결국 코드는 이상 2,000 문자를 포함하고 오른쪽 디버그 얻을 시간이 걸립니다. 당신이 그것에 대해 생각하는 경우에 당신이해야 할 다음 100 년 동안 매년 각 휴가를 하루 1-365 및 행을 나타내는 7 숫자는 쓰기를합니다. 당신은 그 세 번 다음 년의 휴일을로드해야합니다. 그래서 일곱 개 기둥과 100 개의 행을 가진 테이블을 유지하고 올바른 일로를 입력합니다. 당신은 모든 백년 후에이 작업을 수행하고 적은 시간 이상 수행해야하며 휴대용이다.
-
==============================
24.나는 많이 더 읽을 수 있도록 수정하려면 "답"및 소요되는 시간을 시도했다. 우리가 바로 전에 날짜를 설정하고 있기 때문에 정말 그 "-DATEPART"옵션이 필요하지 않습니다. 그것은 꽤 잘 작동하지만 내 신뢰가 흔들리고 있었다 있도록 MLK 데이 2020에 문제가 있었다.
나는 많이 더 읽을 수 있도록 수정하려면 "답"및 소요되는 시간을 시도했다. 우리가 바로 전에 날짜를 설정하고 있기 때문에 정말 그 "-DATEPART"옵션이 필요하지 않습니다. 그것은 꽤 잘 작동하지만 내 신뢰가 흔들리고 있었다 있도록 MLK 데이 2020에 문제가 있었다.
또한 나는 매우 읽기 어려운 있다는 사실처럼 일부러. 나는이를 발견하고는 통과하기가 훨씬 쉽다. 이 날짜 차원 테이블과 매우 유사 나는 시도 3 년 동안 정확하게 시험 작동합니다.
https://www.codeproject.com/Tips/1168430/US-Federal-Holidays-SQL
from https://stackoverflow.com/questions/457176/how-do-i-determine-a-public-holiday-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 : 어떻게 저장 프로 시저의 매개 변수로 데이터베이스 이름을 얻을 수 있습니다 (0) | 2020.07.01 |
---|---|
[SQL] 다른 열 그룹화 다른 칼럼의 최대 값에 기초 얻기 [중복] (0) | 2020.07.01 |
[SQL] 이노 디비에서 MySQL을 LIKE '% 문자열 %'쿼리를 최적화 (0) | 2020.07.01 |
[SQL] 외래 키는 기본 키의 역할을 할 수 있습니까? (0) | 2020.07.01 |
[SQL] MySQL은 - VARCHAR 컬럼에서 숫자 값만 선택 (0) | 2020.07.01 |