[SQL] 날짜 범위 주어진에 임의의 날짜를 삽입 MYSQL
SQL날짜 범위 주어진에 임의의 날짜를 삽입 MYSQL
SQL로, 나는 범위를 제공하는 열에서 임의의 날짜 값을 삽입 할 수 있나요?
예를 들어, 2012-04-30 14시 53분 27초에 2010-04-30 14시 53분 27초의 범위를 소정
나는 범위 부분과 혼동는군요. 난 그냥 할 것 같은이
INSERT INTO `sometable` VALUES (RND (DATETIME()))
해결법
-
==============================
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.이것은 잘 작동합니다 :
이것은 잘 작동합니다 :
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.이 윤년을 위해 완벽하게 작동합니다 :
이 윤년을 위해 완벽하게 작동합니다 :
select from_unixtime( unix_timestamp('2000-1-1') + floor( rand() * ( unix_timestamp('2010-12-31') - unix_timestamp('2000-1-1') + 1 ) ) )
아이디어는 간단하다 : 그때, 두 시간 소인 사이의 임의의 타임 스탬프를 가지고 FROM_UNIXTIME를 사용하여 날짜로 변환합니다. 이 방법은 각 옵션이 동일한 확률이 있는지 확인 할 수 있습니다.
-
==============================
4.가장 쉬운 방법 아웃 :
가장 쉬운 방법 아웃 :
INSERT INTO `sometable` VALUES (SELECT timestamp('2010-04-30 14:53:27') - INTERVAL FLOOR( RAND( ) * 366) DAY);
-
==============================
5.단지 시도 :
단지 시도 :
SELECT TIMESTAMP('2012-04-30 14:53:27')-INTERVAL RAND()*365*2 DAY INTO tbl_name;
-
==============================
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.그것은 오래 된 스레드의 그러나 아직도 .. 내 경우에는이 같은 형식의 임의의 날짜를 생성하는 데 필요한 : 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.
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
from https://stackoverflow.com/questions/11906572/mysql-insert-random-datetime-in-a-given-datetime-range by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL은 어떻게 저장 프로 시저에서 동적으로 테이블을 만드는 방법? (0) | 2020.05.02 |
---|---|
[SQL] SQL Server와 같은 패턴 "전체 단어 일치"검색 (0) | 2020.05.02 |
[SQL] SQLite는 사용자 정의 순서로 (0) | 2020.05.02 |
[SQL] 저장 프로 시저 내에서 즉시 실행은 권한이 부족 오류를주고 계속 (0) | 2020.05.02 |
[SQL] 열 이름 제공된 값의 개수 나 테이블 정의와 일치하지 않습니다 (0) | 2020.05.02 |