2010-06-12 10 views
9

मैं एक MySQL डेटाबेस में 12/24hr (यानी 00:00) घड़ी का समय स्टोर करने की कोशिश कर रहा हूं। फिलहाल मैं डेटाटाइप का उपयोग कर रहा हूं। यह ठीक काम करता है लेकिन यह कॉलम में सेकंड जोड़ने पर जोर देता है। तो आप 09:20 दर्ज करें और इसे 09:20:00 के रूप में संग्रहीत किया जाता है। क्या कोई तरीका है कि मैं इसे MySQL में केवल 00:00 तक सीमित कर सकता हूं?सेकंड्स के बिना MySQL में टाइम डेटाटाइप का उपयोग

उत्तर

16

यह संभव नहीं दिखता है। TIME डेटा प्रकार को 1 सेकंड रिज़ॉल्यूशन के साथ दिन (या विलुप्त समय) के समय का प्रतिनिधित्व करने के लिए परिभाषित किया गया है। हालांकि, आप हमेशा एक SELECT क्वेरी में HH:MM के रूप में अपने क्षेत्र को स्वरूपित करने DATE_FORMAT() फ़ंक्शन का उपयोग कर सकते हैं:

SELECT DATE_FORMAT(NOW(), '%k:%i'); 
+-----------------------------+ 
| DATE_FORMAT(NOW(), '%k:%i') | 
+-----------------------------+ 
| 4:09      | 
+-----------------------------+ 
1 row in set (0.00 sec) 


SELECT DATE_FORMAT(NOW(), '%H:%i'); 
+-----------------------------+ 
| DATE_FORMAT(NOW(), '%H:%i') | 
+-----------------------------+ 
| 04:09      | 
+-----------------------------+ 
1 row in set (0.00 sec) 
1

TIME column type किसी भी पैरामीटर या संशोधक स्वीकार नहीं करता है श्रेणी या सटीक परिभाषित करने के लिए। यदि आप सावधान हैं, तो आप सम्मिलित होने पर सेकंड छोड़ सकते हैं:

संक्षिप्त मानों को एक समय कॉलम में निर्दिष्ट करने के बारे में सावधान रहें। MySQL दिन के समय के रूप में कोलन के साथ संक्षिप्त समय मानों को व्याख्या करता है। वह है, '11: 12 'का अर्थ है '11: 12: 00', नहीं '00: 11: 12 '। MySQL को अनुमानित मानों का उपयोग करके कोलन के बिना संक्षेप में मानता है कि दो सही अंक सेकंड का प्रतिनिधित्व करते हैं (यानी दिन के समय के मुकाबले के रूप में समाप्त हो गया है)। उदाहरण के लिए, आप अर्थ के रूप में की '1112' और 1112 सोच सकते हैं '11: 12: 00 '(12 मिनट 11 बजे के बाद), लेकिन MySQL उन्हें व्याख्या के रूप में 00': 11: 12 ' (11 मिनट, 12 सेकंड)। इसी प्रकार, '12' और 12 को '00: 00: 12 'के रूप में व्याख्या किया गया है।

CREATE TABLE example (
    example_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    elapsed TIME NOT NULL, 
    PRIMARY KEY (example_id) 
); 
INSERT INTO example (elapsed) VALUES ('123:45:00'), ('123:45'); 
SELECT * FROM example; 
+------------+-----------+ 
| example_id | elapsed | 
+------------+-----------+ 
|   1 | 123:45:00 | 
|   2 | 123:45:00 | 
+------------+-----------+ 

... और आप (यदि आवश्यक हो) एक उचित TIME_FORMAT() लगाने से, पढ़ने पर उन्हें निकाल सकते हैं यह देखते हुए कि: समय मूल्य एक घंटे हिस्सा रखने वाले

हैं कि 23 से अधिक है, % एच और% के घंटे प्रारूप विनिर्देश सामान्य 0..23 की सीमा से अधिक मान का उत्पादन करते हैं।

-- Completely untested, I don't have 5.7 yet 
CREATE TABLE example (
    example_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    elapsed TIME NOT NULL, 
    -- Size to accomodate for '-838:59:59' 
    elapsed_display VARCHAR(10) AS (TIME_FORMAT(elapsed, '%k:%i')) VIRTUAL NOT NULL, 
    PRIMARY KEY (example_id) 
); 
: अन्य घंटे के स्वरूप विनिर्देशक घंटे मूल्य सापेक्ष 12.

INSERT INTO example (elapsed) VALUES ('2:00'); 
SELECT example_id, TIME_FORMAT(elapsed, '%k:%i') AS elapsed 
FROM example; 
+------------+---------+ 
| example_id | elapsed | 
+------------+---------+ 
|   1 | 123:45 | 
|   2 | 123:45 | 
|   3 | 2:00 | 
+------------+---------+ 

MySQL/5.7.5 आप भी एक generated column का उपयोग स्वचालित रूप से एक प्रदर्शन मूल्य प्राप्त कर सकते हैं के बाद से उत्पादन

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