2011-02-01 14 views
7

मेरे पास updatetime नामक एक कॉलम है जो timestamp है। तो, उदाहरण के लिए, औसत दिखने वाला मूल्य हो सकता है: 2011-02-01 09:00:51। मैं तारीख के बावजूद दिन के किसी विशेष घंटे के लिए सभी परिणामों को खोज और वापस करने में सक्षम होना चाहता हूं।mysql - दिन के घंटे के आधार पर खोज समयस्टैम्प

2011-02-01 09:00:51 
2011-01-31 09:20:51 
2011-01-11 09:55:44 
etc.... 

SELECT * FROM table WHERE updatetime ......

विचार:

उदाहरण के लिए अगर मैं मान BETWEEN 09:00:00 AND 09:59:99 के लिए स्तंभ यह वापसी होगी खोजा?

HOUR() साथ

उत्तर

14

आप HOUR() समारोह इस्तेमाल कर सकते हैं:

SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9 

ओह, इस क्वेरी के प्रदर्शन भयानक जैसे ही आप कुछ हजार पंक्तियों पर जाना होगा, - कार्यों इंडेक्स करने योग्य नहीं हैं, इसलिए नहीं होगा प्रत्येक बार यह क्वेरी चलने पर एक पूर्ण तालिका स्कैन करें।

हमने इसी स्थिति में क्या किया: हमने एक और कॉलम updatetime_hour बनाया, इसे अनुक्रमित किया, और इसे सम्मिलित किया (और अपडेट पर अपडेट किया गया); फिर क्वेरी तेजी से हो जाता है:

SELECT * FROM 'table' WHERE `updatetime_hour` = 9 

हाँ, हम डेटा denormalized है, और उसे कुछ अतिरिक्त गृह व्यवस्था है, लेकिन मैं अभी तक एक तेजी से समाधान को देखने के लिए। (हम माना जाता है और मापा डालने और अद्यतन updatetime से updatetime_hour पॉप्युलेट करने के लिए चलाता है, लेकिन प्रदर्शन के लिए के खिलाफ फैसला किया, यदि वे आप के लिए उपयोगी होगा।)

+0

अच्छा बिंदु एक के लिए काम किया है प्रदर्शन को झुकाओ। मैं आसानी से सम्मिलित सम्मिलित एक अनुक्रमित घंटे कॉलम को कार्यान्वित कर सकता हूं, लेकिन मेरे पिछले 60k पंक्तियों और अद्यतन 'updatetime_hour' कॉलम डेटा के साथ अद्यतन करने के बारे में कोई विचार? – themerlinproject

+1

@ उपयोगकर्ता 410341: ऑफ-पीक घंटों के दौरान, और बहुत सावधानी से;) 'अपनेटेबल एसईटी अपडेटटाइम_होर = एचओआर (अपडेटटाइम) अपडेट करें; <<- इसमें कुछ समय लगेगा – Piskvor

+0

धन्यवाद, मैंने अभी एक नया प्रश्न पोस्ट किया है: http: // stackoverflow.com/questions/4866056/mysql-create-indexed-hour-column-from-existing-timestamp – themerlinproject

1

प्रयास करें:

SELECT * FROM table WHERE HOUR(updatetime) = 9; 

इस 09:00:00 और 09:59:59 के बीच सभी पंक्तियों वापस आ जाएगी।

HOUR() बस तिथि का घंटा हिस्सा देता है।

0

संभावना: SELECT * FROM 'table' WHERE HOUR(updatetime)='09';

0

ये जवाब काम नहीं करते, यह क्या मुझे केवल

SELECT hour(FROM_UNIXTIME(`updatetime`)) AS date_formatted FROM `table` where hour(FROM_UNIXTIME(`updatetime`))='9' 
संबंधित मुद्दे