복붙노트

[SQL] 나는 MySQL은 날짜에서 월 얻는 방법

SQL

나는 MySQL은 날짜에서 월 얻는 방법

나는이 같은 문으로 MySQL의 결과를 가져올 수 있어야합니다 :

SELECT * 
  FROM table 
 WHERE amount > 1000 

하지만 ...이 같은 노력했다 (사용자의 입력에 따라) 년, 월 일정에 구속 결과를 가져 오기 할 :

SELECT * 
  FROM table 
 WHERE amount > 1000 
   AND dateStart = MONTH('$m')   

...는 $ m는 한 달에 존재하지만 오류를했다.

이 표에서, 실제로 두 날짜가 :의 startDate와 endDate가를하지만 난의 startDate에 집중하고있다. 입력 값은 월, 한 해가 될 것입니다. 어떻게 그 해의 해당 월을 기준으로 결과를 얻을 SQL 문 I 구문을합니까?

해결법

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

    1.당신은 가까웠다 - 비교 뒤쪽으로는 (의 startDate은 DATETIME 또는 TIMESTAMP 데이터 유형입니다 가정) 가지고 :

    당신은 가까웠다 - 비교 뒤쪽으로는 (의 startDate은 DATETIME 또는 TIMESTAMP 데이터 유형입니다 가정) 가지고 :

    SELECT * 
      FROM table 
     WHERE amount > 1000 
       AND MONTH(dateStart) = {$m}
    

    인덱스를 사용할 수 없습니다 열에 기능을 사용하기 때문에, 더 나은 접근 방식과 STR_TO_DATE 기능 BETWEEN 사용하는 것입니다 :

    WHERE startdate BETWEEN STR_TO_DATE([start_date], [format]) 
                        AND STR_TO_DATE([end_date], [format])
    

    구문을 포맷의 문서를 참조하십시오.

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

    2.월 () 함수를 사용합니다.

    월 () 함수를 사용합니다.

    select month(now());
    
  3. ==============================

    3.이 시도:

    이 시도:

    SELECT * 
    FROM table 
    WHERE amount > 1000 AND MONTH(dateStart) = MONTH('$m') AND YEAR(dateStart) = YEAR('$m')
    
  4. ==============================

    4.EG

    EG

    $date = sprintf("'%04d-%02d-01'", $year, $month);
    $query = "
      SELECT
        x,y,dateStart
      FROM
        tablename
      WHERE
        AND amount > 1000
        AND dateStart >= $date
        AND dateStart < $date+Interval 1 month
    ";
    mysql_query($query, ...
    

    이것은 예를 들어, 같은 쿼리를 작성합니다

    WHERE
      AND amount > 1000
      AND dateStart >= '2010-01-01'
      AND dateStart < '2010-01-01'+Interval 1 month
    

    + 간격은 1 개월 DATE_ADD의 대안이다 ().

    SELECT 날짜 ( '2010-01-01'+ 간격 1 개월) -> 2010-02-01 SELECT 날짜 ( '2010-12-01'+ 간격 1 개월) -> 2011-01-01 이 방법 당신은 항상 다음 달 1 일을 얻는다. 당신이 원하는 기록은 해당 날짜 전에 dateStart을 가지고 있지만 한 후 / 당신의 sprintf에 전달 한 달 (연도)의 첫 날 ()에 동일해야합니다. '2010-01-01'+ 간격 1 개월 행 사이 변경되지 않습니다. MySQL은 한 번만 기간을 계산합니다 및 검색을위한 인덱스를 활용할 수 있습니다.

  5. ==============================

    5.이 시도

    이 시도

    SELECT * 
          FROM table 
         WHERE amount > 1000 
           AND MONTH(datestart)
        GROUP BY EXTRACT(YEAR_MONTH FROM datestart)
    
  6. ==============================

    6.(다음 날이 문자열을 변환 날짜 필드가 텍스트)이있는 경우를보십시오 :

    (다음 날이 문자열을 변환 날짜 필드가 텍스트)이있는 경우를보십시오 :

    SELECT * FROM `table_name` WHERE MONTH(STR_TO_DATE(date,'%d/%m/%Y'))='11'
    
    //This will give month number MONTH(STR_TO_DATE(date,'%d/%m/%Y'))
    //If its return 11 then its November
    // Change date format with your date string format  %d/%m/%Y
    
  7. ==============================

    7.MySQL은 5.7, MySQL은 5.6, MySQL은 5.5, MySQL은 5.1, 5.0, MySQL은 4.1, MySQL은 4.0, 3.23 :의 작품

    MySQL은 5.7, MySQL은 5.6, MySQL은 5.5, MySQL은 5.1, 5.0, MySQL은 4.1, MySQL은 4.0, 3.23 :의 작품

  8. from https://stackoverflow.com/questions/2039839/how-do-i-get-month-from-date-in-mysql by cc-by-sa and MIT license