2016년 11월 10일 목요일

[mysql] date_sub 특정 시간 사이에서 랜덤하게 시간 추출하기.

각종 메크로를 만들다보면 채팅 또는 게시판 글, 댓글이  같은 시간에 입력이 되어 티가 나는 경우가 있다. 그럴때 실제 유저가 한거 처럼 시간을 정해서 처리할 수 있는데

현재의 경우는 특정 게시글, 또는 댓글에 좋아요 를 메크로로 작동하기 에서
메크로 작동시간을 게시글 또는 댓글이 게시된 시간 이후로 현재 시간까지의 시간중 랜덤으로 시간을 랜덤으로 추출하는 쿼리이다.

SELECT 절에 서 서브 쿼리로 추출하기.

SELECT
   COL1,
   COL2,
   COL3,
   .
   .
   .
  ,(SELECT DATE_SUB(NOW(), INTERVAL FLOOR( 1 + RAND() * (TIME_TO_SEC(TIMEDIFF( NOW(), (SELECT C.CMT_CREATE_DT FROM CMT_COMMENT C WHERE C.CMT_COMMENT_SEQ = ${cmt_seq}   <<   특정시간 ))) -1 ) ) SECOND) FROM DUAL)


최대한 보기 좋게 썼는데도 가독성이 너무 떨어진다..
빨간색이 특정 게시물 시간 과 현재시간의 차이를 초로 환산한거다.

즉 값 빨간색 쿼리의 값이 3600 이나왔다고 가정하면

  ,(SELECT DATE_SUB(NOW(), INTERVAL FLOOR( 1 + RAND() * (3600 -1 ) ) SECOND) FROM DUAL)

이제 부터 좀 쉬어보이는듯

범위 랜덤 을 구하려면

(최소값 + RAND() * (최대값 - 최소값)) 이므로

1초부터 3600초 사이를 랜덤하게 뽑은후

FLOOR로 정수화 시킨담에

DATE_SUB(NOW, INTERVAL 값 SECOND) 를 통해 이전시간을 구한다. SECOND 대신

HOUR DATE 등 사용이 가능할꺼다.


정리하면

현재 시간  -  ( (현재 시간 - 특정 게시물 작성시간) >> 랜덤 추출 )

더이상의 자세한 설명은 생략한다.






댓글 없음:

댓글 쓰기

[lunux]리눅스 폴더별 용량 확인

리눅스 폴더별 용량 확인 조회 하고자 하는 디렉토리 리스트가있는 경로로 이동후 du -h --max-depth=1