복붙노트

[SQL] MySQL은 두 날짜 사이의 차이

SQL

MySQL은 두 날짜 사이의 차이

어떻게 형식 YYYY-MM-DD hh가에, 두 날짜 사이의 차이를 계산 : MM : SS 초 또는 밀리 초 단위로 결과를 얻을?

해결법

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

    1.

    SELECT TIMEDIFF('2007-12-31 10:02:00','2007-12-30 12:01:01');
    -- result: 22:00:59, the difference in HH:MM:SS format
    
    
    SELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00'); 
    -- result: 79259  the difference in seconds
    

    그래서, 당신은 당신의 목적을 위해 TIMESTAMPDIFF를 사용할 수 있습니다.

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

    2.당신이 DATE 컬럼으로 작업 (또는 날짜 열로 전송할 수 있습니다) 경우, DATEDIFF () 다음 곱하기 24 시간, 60 분, 시도 60 초 (DATEDIFF 반환 일 diff를하기 때문에). MySQL의에서 :

    당신이 DATE 컬럼으로 작업 (또는 날짜 열로 전송할 수 있습니다) 경우, DATEDIFF () 다음 곱하기 24 시간, 60 분, 시도 60 초 (DATEDIFF 반환 일 diff를하기 때문에). MySQL의에서 :

    http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

    예를 들어 :

    mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30 00:00:00') * 24*60*60
    
  3. ==============================

    3.DATEDIFF를 사용하여 일의 날짜 차이를 가져옵니다

    DATEDIFF를 사용하여 일의 날짜 차이를 가져옵니다

    SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
    +------+
    | days |
    +------+
    |   17 |
    +------+
    

    또는

    아래의 링크를 참조하십시오 일이 타임 스탬프 사이의 MySQL의 차이?

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

    4.

    SELECT TIMESTAMPDIFF(HOUR,NOW(),'2013-05-15 10:23:23')
       calculates difference in hour.(for days--> you have to define day replacing hour
    SELECT DATEDIFF('2012-2-2','2012-2-1')
    
    SELECT TO_DAYS ('2012-2-2')-TO_DAYS('2012-2-1')
    
  5. ==============================

    5.

    select 
    unix_timestamp('2007-12-30 00:00:00') - 
    unix_timestamp('2007-11-30 00:00:00');
    
  6. ==============================

    6.

    SELECT TIMESTAMPDIFF(SECOND,'2018-01-19 14:17:15','2018-01-20 14:17:15');
    

    두 번째 접근 방식

    SELECT (DATEDIFF ( '1993년 2월 20일', '1993년 2월 19일') * (24 * 60 * 60)) AS '초';

    CURRENT_TIME() --this will return current Date
    DATEDIFF('','') --this function will return  DAYS and in 1 day there are 24hh 60mm 60sec
    
  7. ==============================

    7.또는, TIMEDIFF 기능을 사용할 수 있습니다

    또는, TIMEDIFF 기능을 사용할 수 있습니다

    mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');
    '-00:00:00.000001'
    mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001' , '2008-12-30 01:01:01.000002');
     '46:58:57.999999'
    
  8. ==============================

    8.이 함수는 날짜 형식 YYYY-MM-DD 두 날짜 및 프로그램을 차이 걸린다. 당신이 필요로하는 아래의 코드를 실행하고 함수를 사용하는 것입니다. 실행 후에는 다음과 같이 사용할 수 있습니다

    이 함수는 날짜 형식 YYYY-MM-DD 두 날짜 및 프로그램을 차이 걸린다. 당신이 필요로하는 아래의 코드를 실행하고 함수를 사용하는 것입니다. 실행 후에는 다음과 같이 사용할 수 있습니다

    SELECT datedifference(date1, date2)
    FROM ....
    .
    .
    .
    .
    
    
    DELIMITER $$
    
    CREATE FUNCTION datedifference(date1 DATE, date2 DATE) RETURNS DATE
    NO SQL
    
    BEGIN
        DECLARE dif DATE;
        IF DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2)))) < 0    THEN
                    SET dif=DATE_FORMAT(
                                            CONCAT(
                                                PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))DIV 12 , 
                                                '-',
                                                PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))% 12 , 
                                                '-',
                                                DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(DATE_SUB(date1, INTERVAL 1 MONTH)), '-', DAY(date2))))),
                                            '%Y-%m-%d');
        ELSEIF DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2)))) < DAY(LAST_DAY(DATE_SUB(date1, INTERVAL 1 MONTH))) THEN
                    SET dif=DATE_FORMAT(
                                            CONCAT(
                                                PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))DIV 12 , 
                                                '-',
                                                PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))% 12 , 
                                                '-',
                                                DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2))))),
                                            '%Y-%m-%d');
        ELSE
                    SET dif=DATE_FORMAT(
                                            CONCAT(
                                                PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))DIV 12 , 
                                                '-',
                                                PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))% 12 , 
                                                '-',
                                                DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2))))),
                                            '%Y-%m-%d');
        END IF;
    
    RETURN dif;
    END $$
    DELIMITER;
    
  9. ==============================

    9.

    select TO_CHAR(TRUNC(SYSDATE)+(to_date( '31-MAY-2012 12:25', 'DD-MON-YYYY HH24:MI') 
                                 - to_date( '31-MAY-2012 10:37', 'DD-MON-YYYY HH24:MI')), 
            'HH24:MI:SS') from dual
    

    OK 그것은 영업 이익은 무엇을 요구 꽤 아니지만, 내가하고 싶었던거야 :-)

  10. ==============================

    10.YYYY MM에서 두 날짜 사이에이 코드 계산의 차이는 형식을 위해 dd.

    YYYY MM에서 두 날짜 사이에이 코드 계산의 차이는 형식을 위해 dd.

    declare @StartDate datetime 
    declare @EndDate datetime
    
    declare @years int
    declare @months int 
    declare @days int
    
    --NOTE: date of birth must be smaller than As on date, 
    --else it could produce wrong results
    set @StartDate = '2013-12-30' --birthdate
    set @EndDate  = Getdate()            --current datetime
    
    --calculate years
    select @years = datediff(year,@StartDate,@EndDate)
    
    --calculate months if it's value is negative then it 
    --indicates after __ months; __ years will be complete
    --To resolve this, we have taken a flag @MonthOverflow...
    declare @monthOverflow int
    select @monthOverflow = case when datediff(month,@StartDate,@EndDate) - 
      ( datediff(year,@StartDate,@EndDate) * 12) <0 then -1 else 1 end
    --decrease year by 1 if months are Overflowed
    select @Years = case when @monthOverflow < 0 then @years-1 else @years end
    select @months =  datediff(month,@StartDate,@EndDate) - (@years * 12) 
    
    --as we do for month overflow criteria for days and hours 
    --& minutes logic will followed same way
    declare @LastdayOfMonth int
    select @LastdayOfMonth =  datepart(d,DATEADD
        (s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0)))
    
    select @days = case when @monthOverflow<0 and 
        DAY(@StartDate)> DAY(@EndDate) 
    then @LastdayOfMonth + 
      (datepart(d,@EndDate) - datepart(d,@StartDate) ) - 1  
          else datepart(d,@EndDate) - datepart(d,@StartDate) end 
    
    
    select
     @Months=case when @days < 0 or DAY(@StartDate)> DAY(@EndDate) then @Months-1 else @Months end
    
    Declare @lastdayAsOnDate int;
    set @lastdayAsOnDate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate),0)));
    Declare @lastdayBirthdate int;
    set @lastdayBirthdate =  datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@StartDate)+1,0)));
    
    if (@Days < 0) 
    (
        select @Days = case when( @lastdayBirthdate > @lastdayAsOnDate) then
            @lastdayBirthdate + @Days
        else
            @lastdayAsOnDate + @Days
        end
    )
    print  convert(varchar,@years)   + ' year(s),   '  +
           convert(varchar,@months)  + ' month(s),   ' +
           convert(varchar,@days)    + ' day(s)   '   
    
  11. ==============================

    11.당신이 코드를 구현할 수있는 문자열로 텍스트 필드에 저장된 날짜를 한 경우는 과거 일 수 주일, 한 달 분류 해 목록을 가져옵니다 :

    당신이 코드를 구현할 수있는 문자열로 텍스트 필드에 저장된 날짜를 한 경우는 과거 일 수 주일, 한 달 분류 해 목록을 가져옵니다 :

    SELECT * FROM `table` WHERE STR_TO_DATE(mydate, '%d/%m/%Y') < CURDATE() - INTERVAL 30 DAY AND STR_TO_DATE(date, '%d/%m/%Y') > CURDATE() - INTERVAL 60 DAY
    
    //This is for a month
    
    SELECT * FROM `table` WHERE STR_TO_DATE(mydate, '%d/%m/%Y') < CURDATE() - INTERVAL 7 DAY AND STR_TO_DATE(date, '%d/%m/%Y') > CURDATE() - INTERVAL 14 DAY
    
    //This is for a week 
    

    % D % m의 %는 Y는 날짜 형식입니다

    이 표시 동일한 개념으로 마지막 주에 기록 될 수 있도록 지난 14 일부터 지난 7 일 위부터 아래의 월 또는 년입니다 :이 쿼리는이 같은 사용자가 설정 한 일 간의 기록을 표시합니다. 무엇이든 값은 같은 날짜 아래에 제공하고 있습니다 : 7 일에서 다른 값이 이중으로 십사일 될 수 있도록 아래에. 우리가 여기서 말하고있는 것은 최근 7 일 최근 14 일에서 위 아래의 모든 기록을 얻을. 이것은 당신이 한 달 동안도 매년 30 ~ 60 일 값을 변경할 수 있습니다 일주일 기록이다.

    당신은 누군가를 도움이되기를 바랍니다 감사합니다.

  12. ==============================

    12.당신은 단순히이 작업을 수행 할 것입니다 :

    당신은 단순히이 작업을 수행 할 것입니다 :

    SELECT (end_time - start_time) FROM t; -- return in Millisecond
    SELECT (end_time - start_time)/1000 FROM t; -- return in Second
    
  13. ==============================

    13.왜 그냥

    왜 그냥

    테이블 - 선택 합 (DATE2 날짜 1)

    날짜 1과 날짜 2가 날짜입니다

  14. from https://stackoverflow.com/questions/4759248/difference-between-two-dates-in-mysql by cc-by-sa and MIT license