programing

MySQL에 임의 날짜 삽입/업데이트

javaba 2022. 10. 6. 21:29
반응형

MySQL에 임의 날짜 삽입/업데이트

MySQL을 사용하여 지난 2주 동안 임의의 날짜로 컬럼을 업데이트하려면 어떻게 해야 합니까?

예를 들어 (코드는 실제로 동작하지 않습니다)

UPDATE mytable
SET col = sysdate() - rand(1, 14);

다음 식을 사용하여 임의의 정수를 얻을 수 있습니다.

i <= R < j 의 범위의 랜덤 정수 R 를 취득하려면 , 식을 사용합니다.예를 들어, 7 <= R < 12 의 범위의 랜덤 정수를 취득하려면 , 다음의 문을 사용할 수 있습니다.

SELECT FLOOR(7 + (RAND() * 5));

https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_rand

이를 사용하여 일, 시간 또는 분(해상도마다 다름)을 랜덤하게 생성하고 해당 숫자를 현재 날짜에 추가합니다.

전체 표현은 다음과 같습니다.

-- Date only
SELECT CURRENT_DATE - INTERVAL FLOOR(RAND() * 14) DAY;
-- Date and time
SELECT CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 14 * 24 * 60 *60) SECOND;

데모

UPDATE mytable
SET col = CURRENT_DATE - INTERVAL FLOOR(RAND() * 14) DAY

이 세트는col현재 날짜 - 13일과 현재 날짜 사이의 날짜로 둘 다 포함하면 총 14일이 됩니다.

당신의 주된 문제는 입니다.RAND()에서는 지정한 값의 범위를 사용할 수 없습니다.항상 0과 1 사이의 값을 반환합니다.

난 1을 못 풀겠어현재 14개의 랜덤 솔루션을 사용하실 수 있습니다.단, 시작하기 위해 최근 10일 이내에 임의의 날짜가 선택됩니다.

SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(RAND(1)*10) DAY)) 

간단한 옵션 중 하나는 다음 쿼리를 사용하는 것입니다.

UPDATE mytable
SET col = (
    NOW() - INTERVAL FLOOR(RAND() * 14) DAY 
    + INTERVAL FLOOR(RAND() * 23) HOUR
    + INTERVAL FLOOR(RAND() * 59) MINUTE
    + INTERVAL FLOOR(RAND() * 59) SECOND
);

또는 보다 우아하게:

UPDATE mytable
SET col = (NOW() - INTERVAL FLOOR(RAND() * 14 * 24 * 60 * 60) SECOND);

언급URL : https://stackoverflow.com/questions/4546111/insert-update-random-date-in-mysql

반응형