MySQL

2010-12-28 5 views
37

में यादृच्छिक दिनांक डालें/अपडेट करें मैं MySQL का उपयोग कर पिछले 2 सप्ताह में यादृच्छिक दिनांक के साथ कॉलम कैसे अपडेट करूं?MySQL

उदाहरण के लिए (कोड वास्तव में काम नहीं करता है):

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

उत्तर

58

आप इस अभिव्यक्ति के साथ एक यादृच्छिक पूर्णांक प्राप्त कर सकते हैं:

रेंज में एक यादृच्छिक पूर्णांक आर प्राप्त करने के लिए मैं < = आर < j, अभिव्यक्ति FLOOR(i + RAND() * (j - i)) का उपयोग करें।

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

http://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html

उपयोग कि एक यादृच्छिक उत्पन्न करने के लिए: उदाहरण के लिए, एक यादृच्छिक पूर्णांक में सीमा रेंज 7 < = आर < 12 प्राप्त करने के लिए, आप निम्न कथन इस्तेमाल कर सकते हैं दिनों, घंटों या मिनटों की संख्या (संकल्प के आधार पर) और उस तारीख को वर्तमान तिथि में जोड़ें। पूर्ण अभिव्यक्ति इस तरह कुछ होगी:

SELECT NOW() - INTERVAL FLOOR(RAND() * 14) DAY; 
+0

यह वास्तव में पुराना उत्तर और वास्तव में पुराना प्रश्न है, लेकिन इसने एक समस्या हल की जहां मुझे 300 से अधिक यादृच्छिक तिथियां पेश करनी पड़ीं। धन्यवाद! –

+0

@ इस्माइल मिगुएल, यह वास्तव में ऐसा करने का एक बहुत ही अप्रत्यक्ष तरीका है। टाइमस्टैम्प का उपयोग करें http://stackoverflow.com/a/28944156/632951, यह त्रुटियों के लिए अधिक सरल और कम प्रवण है। – Pacerier

+1

@Pacerier - दोनों विधियां मेरे लिए ठीक दिखती हैं (और काफी समान)। आपके मन में क्या संभावित त्रुटियां हैं? –

6

आपका मुख्य समस्या यह है कि RAND() की तरह आपके द्वारा निर्दिष्ट मानों की एक श्रेणी अनुमति नहीं देता है। यह हमेशा 0 और 1.

के बीच एक मान वापस करेगा, मैं अभी 1..14 यादृच्छिक समाधान नहीं कर सकता, लेकिन आपको शुरू करने के लिए, यह पिछले 10 दिनों के भीतर यादृच्छिक तिथि लेगा:

13 दिन -
SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(RAND(1)*10) DAY)) 
11
UPDATE mytable 
SET col = CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 14) DAY 

यह (और सहित) आज की तारीख और आज की तारीख के बीच एक तारीख को col सेट। वर्तमान तिथि प्राप्त करने के लिए 15 से गुणा करें - 14 दिन।

 संबंधित मुद्दे