복붙노트

[SQL] 날짜 범위 주어진에 임의의 날짜를 삽입 MYSQL

SQL

날짜 범위 주어진에 임의의 날짜를 삽입 MYSQL

SQL로, 나는 범위를 제공하는 열에서 임의의 날짜 값을 삽입 할 수 있나요?

예를 들어, 2012-04-30 14시 53분 27초에 2010-04-30 14시 53분 27초의 범위를 소정

나는 범위 부분과 혼동는군요. 난 그냥 할 것 같은이

INSERT INTO `sometable` VALUES (RND (DATETIME())) 

해결법

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

    1.여기에 도움이 될 것입니다 예입니다 :

    여기에 도움이 될 것입니다 예입니다 :

    INSERT INTO `sometable` VALUES(
        FROM_UNIXTIME(
            UNIX_TIMESTAMP('2010-04-30 14:53:27') + FLOOR(0 + (RAND() * 63072000))
        )
    )
    

    그것은 기본으로 날짜 2010-04-30 14시 53분 27초를 사용하여 변환하는 유닉스 타임 스탬프,베이스 날짜와 다시 DATETIME로 변환을 0 ~ 2 세 초 임의의 숫자를 추가합니다.

    그것은 꽤 가까이 있지만 긴 시간 기간 동안 년을 도약 및 기타 조정을 밖으로 던져 것입니다해야한다.

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

    2.이것은 잘 작동합니다 :

    이것은 잘 작동합니다 :

    SET @MIN = '2010-04-30 14:53:27';
    SET @MAX = '2012-04-30 14:53:27';
    SELECT TIMESTAMPADD(SECOND, FLOOR(RAND() * TIMESTAMPDIFF(SECOND, @MIN, @MAX)), @MIN);
    

    TIMESTAMPDIFF 날짜 범위 (초)을 결정하는 데 사용됩니다. 0 사이의 난수 범위 초 0-1의 결과 사이의 난수를 곱. 데이터가 경계 범위 사이의 임의의 날짜 범위 결과의 경계 낮은 초이 임의의 숫자를 추가.

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

    3.이 윤년을 위해 완벽하게 작동합니다 :

    이 윤년을 위해 완벽하게 작동합니다 :

    select from_unixtime(
        unix_timestamp('2000-1-1') + floor(
            rand() * (
                unix_timestamp('2010-12-31') - unix_timestamp('2000-1-1') + 1
            )
        )
    )
    

    아이디어는 간단하다 : 그때, 두 시간 소인 사이의 임의의 타임 스탬프를 가지고 FROM_UNIXTIME를 사용하여 날짜로 변환합니다. 이 방법은 각 옵션이 동일한 확률이 있는지 확인 할 수 있습니다.

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

    4.가장 쉬운 방법 아웃 :

    가장 쉬운 방법 아웃 :

    INSERT INTO `sometable` VALUES (SELECT timestamp('2010-04-30 14:53:27') - INTERVAL FLOOR( RAND( ) * 366) DAY);
    
  5. ==============================

    5.단지 시도 :

    단지 시도 :

    SELECT TIMESTAMP('2012-04-30 14:53:27')-INTERVAL RAND()*365*2 DAY INTO tbl_name;
    
  6. ==============================

    6.이것은 나를 위해 일하지만 내 문제는 조금 달랐다. 나는 임의의 날짜에 열에서 특정 값을 할당했다.

    이것은 나를 위해 일하지만 내 문제는 조금 달랐다. 나는 임의의 날짜에 열에서 특정 값을 할당했다.

        UPDATE Tablename
        SET columnName = addtime(concat_ws(' ','2018-07-25' + interval rand()*2 day 
        ,'00:00:00'),sec_to_time(floor(0 + (rand() * 86401))))
        WHERE columnName = condition;
    
  7. ==============================

    7.그것은 오래 된 스레드의 그러나 아직도 .. 내 경우에는이 같은 형식의 임의의 날짜를 생성하는 데 필요한 : 2017년 1월 1일합니다. 사람이 그것을 필요로 할 경우 나는 drew010 솔루션 @ 사용 및 DATE_FORMAT와 날짜를 포맷했다.

    그것은 오래 된 스레드의 그러나 아직도 .. 내 경우에는이 같은 형식의 임의의 날짜를 생성하는 데 필요한 : 2017년 1월 1일합니다. 사람이 그것을 필요로 할 경우 나는 drew010 솔루션 @ 사용 및 DATE_FORMAT와 날짜를 포맷했다.

    여기 내 코드는 다음과 같습니다

    SELECT DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP('2015-01-01') + FLOOR(0 + (RAND() * 63072000))), '%Y-%m-%d');
    
  8. ==============================

    8.

    SET @MIN = '2019-06-29 00:53:27';
    SET @MAX = '2019-06-29 13:53:27';
    
    UPDATE tablename
    SET columnname = TIMESTAMPADD(SECOND, FLOOR(RAND() * TIMESTAMPDIFF(SECOND, @MIN, @MAX)), @MIN)
    WHERE `columnname` = condition
    
  9. from https://stackoverflow.com/questions/11906572/mysql-insert-random-datetime-in-a-given-datetime-range by cc-by-sa and MIT license