복붙노트

[SQL] 주 없음을 사용하여 MySQL의에 일주일의 첫날을 얻기

SQL

주 없음을 사용하여 MySQL의에 일주일의 첫날을 얻기

어떻게 주 번호를 사용할 수 주어진 일주일의 첫날을받을 수 있나요?

예를 들어 내가 사용할 수있는 유일한 매개 변수로이 WEEKNO (29)를 사용하여 일요일 7월 18일 반환하는 MySQL의 쿼리를 작성하고 싶습니다 WEEK 29.I에서 우리가이 게시물을 작성한다.

해결법

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

    1.당신이 사용할 수있는:

    당신이 사용할 수있는:

    SELECT STR_TO_DATE('201003 Monday', '%X%V %W');
    

    이것은 당신에게 2010-01-18 것이 주 2010 년 3의 월요일 날짜를 줄 것이다.

    또 다른 예:

     SELECT STR_TO_DATE('201052 Sunday', '%X%V %W');
    

    당신에게 2010-12-26 될 2010 52 주 일요일 날짜를 줄 것이다.

    그리고 마지막으로, 원래 예제를 사용 :

    SELECT STR_TO_DATE('201029 Sunday', '%X%V %W');
    

    이 2010-07-18을 제공합니다.

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

    2.이는 일주일에 현재 날짜를 기준으로 일주일의 마지막 날의 첫날을 얻기의 정확한 방법입니다 :

    이는 일주일에 현재 날짜를 기준으로 일주일의 마지막 날의 첫날을 얻기의 정확한 방법입니다 :

    adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart,
    adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd
    
  3. ==============================

    3.대답은 가장 기본적인 형태로이 같은이 보드의 외모에 지금까지 좋아 :

    대답은 가장 기본적인 형태로이 같은이 보드의 외모에 지금까지 좋아 :

    SELECT STR_TO_DATE('201003 Monday', '%X%V %W'); 
    

    이것은 시작하는 좋은 답변,하지만 당신은 당신이 몇 가지 추가 로직을 추가하지 않는 주 () 함수와 연동 해에 사용할 넣어 시작할 때 어떤 일에 고장.

    여기에 같은 일의 길고 지저분한 버전이 있지만, 모든 일 (BTW 현재 날짜가이 asnwer에 내장되어 있습니다)에서 작동하도록 보인다 :

    SELECT STR_TO_DATE(
    (IF( CAST(WEEK(NOW(),0) AS UNSIGNED) = 0,
    (CONCAT(
    CAST((CAST(YEAR(NOW()) AS UNSIGNED) - 1) AS CHAR),
    '52 Sunday')),
    (CONCAT(
    CAST(YEAR(NOW()) AS CHAR), 
    IF( CAST(WEEK(NOW(),0) AS UNSIGNED) < 10,'0','' ),
    CAST(WEEK(NOW(),0) AS CHAR),
    ' Sunday')))),
    '%X%V %W');
    

    이 혼란이 발생하는 문제를 처리 할 때 특정 요일에 걸쳐 올해 롤. 예를 2011 주이 전년도에 있었다 시작 일요일, 그래서 토요일에 시작했다. 여기에 하드 코딩 예제를 선택이다 :

    SELECT STR_TO_DATE(
    (IF( CAST(WEEK('2011-01-01',0) AS UNSIGNED) = 0,
    (CONCAT(
    CAST((CAST(YEAR('2011-01-01') AS UNSIGNED) - 1) AS CHAR),
    '52 Sunday')),
    (CONCAT(
    CAST(YEAR('2011-01-01') AS CHAR), 
    IF( CAST(WEEK('2011-01-01',0) AS UNSIGNED) < 10,'0','' ),
    CAST(WEEK('2011-01-01',0) AS CHAR),
    ' Sunday')))),
    '%X%V %W');
    

    수율 >> '2010-12-26'

    SELECT STR_TO_DATE(
    (IF( CAST(WEEK('2011-01-02',0) AS UNSIGNED) = 0,
    (CONCAT(
    CAST((CAST(YEAR('2011-01-02') AS UNSIGNED) - 1) AS CHAR),
    '52 Sunday')),
    (CONCAT(
    CAST(YEAR('2011-01-02') AS CHAR), 
    IF( CAST(WEEK('2011-01-02',0) AS UNSIGNED) < 10,'0','' ),
    CAST(WEEK('2011-01-02',0) AS CHAR),
    ' Sunday')))),
    '%X%V %W');
    

    수율 >> '2011-01-02'

    다른 asnwer처럼, 나는 말했다 모든 것은이 같은 그 모습을 게시

    SELECT
    adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart, 
    adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd;
    

    이 방법은 혼란없이 모든 날짜에 마찬가지로 잘 작동하는 것 같다!

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

    4.이것에 대한 간단하고 동적 인 방법이 될 수 있습니다. 다음 코드를 사용합니다.

    이것에 대한 간단하고 동적 인 방법이 될 수 있습니다. 다음 코드를 사용합니다.

    SELECT STR_TO_DATE( concat( concat( date_format( CURDATE( ) , '%Y' ) , WEEKOFYEAR( CURDATE( ) ) ) , ' Monday' ) , '%X%V %W' );
    
  5. ==============================

    5.당신의 주 시작 일요일이고 주말 토요일 인 경우,이 하나를 사용합니다 :

    당신의 주 시작 일요일이고 주말 토요일 인 경우,이 하나를 사용합니다 :

    SELECT
      DATE_ADD(CURDATE(), INTERVAL (MOD(DAYOFWEEK(CURDATE())-1, 7)*-1) DAY) AS week_start,
      DATE_ADD(CURDATE(), INTERVAL ((MOD(DAYOFWEEK(CURDATE())-1, 7)*-1)+6) DAY) AS week_end
    

    MySQL을 테스트.

  6. ==============================

    6.DCP의 대답에 추가 :

    DCP의 대답에 추가 :

    SELECT STR_TO_DATE('201553 Monday', '%x%v %W')
    

    일주일의 시작일이 월요일 인 경우 당신에게 월요일을 줄 것이다. 형식 지정자는 작은 작성해야합니다. 어떤 수학은 필요하지 않습니다.

  7. ==============================

    7.테스트되지 않은 (I 손에 MySQL이없는) :

    테스트되지 않은 (I 손에 MySQL이없는) :

    date_add(
       date_sub(curdate(), interval weekday(curdate()) day),
       interval ((NUM-weekofyear(curdate()))*7) day)
    
  8. ==============================

    8.

    SELECT CONCAT(RIGHT(STR_TO_DATE(CONCAT(YEARWEEK(NOW()),'Monday'), '%X%V %W'),2),'-', 
            MID(STR_TO_DATE(CONCAT(YEARWEEK(NOW()),'Monday'), '%X%V %W'),6,2),'-',
            LEFT(STR_TO_DATE(CONCAT(YEARWEEK(NOW()),'Monday'), '%X%V %W'),4)) AS 'Lundi',
    
       CONCAT(RIGHT(STR_TO_DATE(CONCAT(YEAR(NOW()), week(now(),3),'Sunday'), '%X%V %W'),2),'-', 
            MID(STR_TO_DATE(CONCAT(YEAR(NOW()), week(now(),3),'Sunday'), '%X%V %W'),6,2),'-',
            LEFT(STR_TO_DATE(CONCAT(YEAR(NOW()), week(now(),3),'Sunday'), '%X%V %W'),4)) AS 'Dimanche';
    
  9. from https://stackoverflow.com/questions/3317980/getting-first-day-of-the-week-in-mysql-using-week-no by cc-by-sa and MIT license