복붙노트

[SQL] MySQL의에서 달의 주를위한 기능

SQL

MySQL의에서 달의 주를위한 기능

나는 MySQL의 쿼리의 달 (보다는 올해의 쉬운 주)의 주를 얻을 수있는 간단한 기능을 찾고 있었다.

I이었다 가지고 올 수있는 최선 :

WEEK(dateField) - WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField)-1 DAY)) + 1

나는 여기에 바퀴를 개혁하고있어 알고 사랑하고, 줄 쉽고 청소기 솔루션이 있다면?

해결법

  1. ==============================

    1.AFAIK는 매월 첫 번째 주에 표준이 없다.

    AFAIK는 매월 첫 번째 주에 표준이 없다.

    올해의 첫 번째 주 월 4 일이 포함 된 주입니다.

    어떻게 첫 주 달의를 정의합니까?

    최신 정보:

    이 같은 쿼리를 다시 작성해야합니다 :

    SELECT  WEEK(dateField, 5) -
            WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField) - 1 DAY), 5) + 1
    

    그래서 올해의 전환이 올바르게 처리하고, 주 월요일에 시작하는 것이.

    그렇지 않으면 쿼리는 괜찮습니다.

  2. ==============================

    2.때때로보고 데이터베이스에 사용되는 대안이있다. 그것은하자 날짜 (키) 당 하나 개의 행이 연감, 호출, 테이블을 생성, 그리고보고 목적으로 유용 할 수있는 날짜의 모든 필요한 속성이 있습니다.

    때때로보고 데이터베이스에 사용되는 대안이있다. 그것은하자 날짜 (키) 당 하나 개의 행이 연감, 호출, 테이블을 생성, 그리고보고 목적으로 유용 할 수있는 날짜의 모든 필요한 속성이 있습니다.

    월 열의 주뿐만 아니라, 날짜가 회사의 휴가, 그리고 그런 것들 여부에 대한 열이있을 수 있습니다. 기업 7 월 또는 다른 달에 시작하는 회계 연도가 있다면, 당신은 회계 연도 회계 월, 재정 주 등 각 날짜가 속한를 포함 할 수있다.

    그럼 당신은 채울 날짜 범위 제공, 허공이 테이블을 채우는 하나 개의 프로그램을 작성합니다. 당신은 단 한 번이 프로그램의 모든 미친 달력 계산을 포함한다.

    당신이 다른 테이블의 날짜에 대한 속성을 알아야 할 때 그런 다음, 당신은 단지 조인을 수행하고 열을 사용합니다. 예, 그것은 또 하나의 결합입니다. 그리고 더,이 테이블은 정규화하지 않습니다. 그러나 특정 매우 구체적인 요구를위한 좋은 디자인은 여전히.

  3. ==============================

    3.(그냥 미래의 독자를 위해 명확하게 :이 오래된 질문이 대답 때문에 나는 상황의 모든 종류에 대한 추가 "구성 옵션"이 솔루션 / 정의를 추가, 그래서 현재의 대답이 만족되지 않은 묵시적 ​​현상금의 추가되었습니다.)

    (그냥 미래의 독자를 위해 명확하게 :이 오래된 질문이 대답 때문에 나는 상황의 모든 종류에 대한 추가 "구성 옵션"이 솔루션 / 정의를 추가, 그래서 현재의 대답이 만족되지 않은 묵시적 ​​현상금의 추가되었습니다.)

    이 달의 주에 대한 표준 정의는 없지만, 일반적인 솔루션은 여러분의 필요에 configurate 수있는, 다음 공식과 같다 :

    select (dayofmonth(dateField) + 6 + (7 - "min_days_for_partial_week") 
            - (weekday(datefield) - "weekday_startofweek" + 7) MOD 7) DIV 7 as week_of_month;
    

    어디

    이 공식은 현재 주 1 주일로 계산하기에 충분한 일이없는 부분 주입니다 값 0 6 0 수단을 반환하고, 6 만 미만 삼일와 일부 주 주 수 있도록 할 때 발생할 수 1.

    예를 들면 :

    일주일의 첫날이 월요일 인 경우 ( "weekday_startofweek"= 0)와 주 1이 항상 전체 주 ( "min_days_for_partial_week"= 7)해야한다, 이것은로 단순화

    select (dayofmonth(dateField) + 6 - weekday(datefield)) DIV 7 as week_of_month;
    

    예를 들어, 2016년 6월가 수요일에 시작했기 때문에, 2016년 6월 2일 당신은 0을 얻을 것이다이 6 월 2016 첫 번째 월요일 이후 2016년 6월 6일 당신은, 일을 얻을 것이다.

    일요일 ( "평일 startofweek"= 6)로주의 최초의 날이 항상 주 1 ( "min_days_for_partial_week"= 1)입니다 공식 및 주 시작을 에뮬레이션하기 위해이 될 것입니다

    select (dayofmonth(dateField) + 12 - (weekday(datefield) + 1) MOD 7) DIV 7 as week_of_month;
    

    당신은 제대로 상수에서 온 이년 알고있는 것을 언급 할 수도 있지만.

  4. ==============================

    4.일주일에 내 솔루션은 일요일에 시작됩니다.

    일주일에 내 솔루션은 일요일에 시작됩니다.

  5. from https://stackoverflow.com/questions/785206/function-for-week-of-the-month-in-mysql by cc-by-sa and MIT license