MySQL क्वेरी में तारीख के लिए टाइमस्टैम्प परिवर्तित करें


187

मैं timestampMySQL को डेट में बदलना चाहता हूं ।

मैं एक के रूप में पाठ फ़ाइल में user.registration फ़ील्ड को प्रारूपित करना चाहूंगा yyyy-mm-dd

यहाँ मेरी एसक्यूएल है:

$sql = requestSQL("SELECT user.email, 
                   info.name, 
                   FROM_UNIXTIME(user.registration),
                   info.news
                   FROM user, info 
                   WHERE user.id = info.id ", "export members");

मैंने दिनांक रूपांतरण की भी कोशिश की:

DATE_FORMAT(user.registration, '%d/%m/%Y')
DATE(user.registration)

मैं पाठ फ़ाइल लिखने से पहले परिणाम प्रतिध्वनित करता हूं और मुझे प्राप्त होता है:

email1; name1; DATE_FORMAT (user.registration, '% d /% m /% Y');

Email2; NAME2; news2

मैं उस फ़ील्ड को दिनांक में कैसे बदल सकता हूं?


इसकी फ़ाइल को बिल्कुल उसी तरह सहेजना? Sql क्वेरी चलाने के लिए आप किस कोड का उपयोग कर रहे हैं?
seanbreeden

1
मैंने अपना प्रश्न संपादित किया, requeteSQL क्वेरी चल रही है
19

जवाबों:


371
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'

2
MySQL 5.6.23 के अनुसार, मुझे लगता है कि FROM_UNIXTIME () का मान सीधे दर्ज किया जाना चाहिए: यानी, DATE_FORMAT (FROM_UNIXTIME (user.registration), '% e% b% Y') AS 'date_formatted'
JESii

चयन करें * उपयोगकर्ताओं से जहां DATE_FORMAT (FROM_UNIXTIME ( usersuser_created_at), '% Y-% b-% e') = '2015-03-06' यह सही प्रारूप है या मुझे इसे संशोधित करना चाहिए?
धीरज थेडिजे

2
@ धीरज तेदेइजे इसे 2018-Nov-6 के रूप में दिखाता है। आप '%Y-%m-%d'इसे PHP में स्वरूपित करने के लिए देख रहे होंगे (date('Y-m-d',$row->user_created_at))- यह (दोनों वेरिएंट, SQL और PHP) 2018-11-06 के रूप में दिखाता है
क्रिस एस।

यदि आप इस प्रकार "hh: mm: ss" फैशन में समय जोड़ना चाहते हैं, तो इसे प्रारूप स्ट्रिंग '% H:% i:% s' में जोड़ें
luis.ap.uyen

63

MYSQL में तारीख के लिए टाइमस्टैम्प परिवर्तित करें

पूर्णांक टाइमस्टैम्प के साथ तालिका बनाएं:

mysql> create table foo(id INT, mytimestamp INT(11));
Query OK, 0 rows affected (0.02 sec)

कुछ मान डालें

mysql> insert into foo values(1, 1381262848);
Query OK, 1 row affected (0.01 sec)

जरा देखो तो

mysql> select * from foo;
+------+-------------+
| id   | mytimestamp |
+------+-------------+
|    1 |  1381262848 |
+------+-------------+
1 row in set (0.00 sec)

संख्या को टाइमस्टैम्प में बदलें:

mysql> select id, from_unixtime(mytimestamp) from foo;
+------+----------------------------+
| id   | from_unixtime(mytimestamp) |
+------+----------------------------+
|    1 | 2013-10-08 16:07:28        |
+------+----------------------------+
1 row in set (0.00 sec)

इसे एक पठनीय प्रारूप में परिवर्तित करें:

mysql> select id, from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') from foo;
+------+-------------------------------------------------+
| id   | from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') |
+------+-------------------------------------------------+
|    1 | 2013 8th October 04:07:28                       |
+------+-------------------------------------------------+
1 row in set (0.00 sec)

कृपया% H को% H
Tomot

61

सिर्फ एक तारीख पाने के लिए आप castयह कर सकते हैं

cast(user.registration as date)

और एक विशिष्ट प्रारूप का उपयोग करने के लिए date_format

date_format(registration, '%Y-%m-%d')

SQLFiddle डेमो


यह एक ही परिणाम देता है, कास्ट (उपयोगकर्ता के रूप में दिनांक के रूप में स्नातक) क्षेत्र के मूल्य के बजाय प्रदर्शित किया जाता है
अंतिम

5
हालांकि यह काम किया - कास्ट (from_unixtime (user.registration) AS date)
Eric Ness

मेरे पास विशिष्ट तिथि प्रारूप है जो इसके लिए मेरे साथ-साथ संभव के लिए भी काम करता है धन्यवाद
कृपाण टैबाबाबी यज़ीदी

उपयोग "DATETIME" के रूप में घंटे मिनट और सेकंड भी पाने के लिए
एनरिक

मुझे लगता है कि यह उत्तर छोटा और स्पष्ट समाधान है। यह मेरे लिए ज़्यादा प्रधान है।
रोमन मटेव

18

यदि registrationक्षेत्र वास्तव में प्रकार का है TIMESTAMPतो आपको बस करने में सक्षम होना चाहिए:

$sql = "SELECT user.email, 
           info.name, 
           DATE(user.registration), 
           info.news
      FROM user, 
           info 
     WHERE user.id = info.id ";

और पंजीकरण को yyyy-mm-dd के रूप में दिखाया जाना चाहिए


मैंने कोशिश की, लेकिन मुझे एक ही परिणाम मिला: DATE (user.registration) क्षेत्र के मूल्य के बजाय प्रदर्शित होता है

जैसा कि किसी ने सुझाव दिया, क्या आप सीधे mysql क्लाइंट का उपयोग करके क्वेरी को सफलतापूर्वक चला सकते हैं? मैंने अपेक्षित कार्य के बारे में नहीं सुना है, यह वास्तव में क्या करता है?
cs0lar

दुर्भाग्य से मैं सीधे एक mysql क्लाइंट का उपयोग करने में सक्षम नहीं हूं, मेरे पास अपना सर्वर नहीं है ... मैंने requeteSQL प्रदान किया है, मूल रूप से यह केवल ईमेल भेजने के लिए त्रुटि होने पर क्वेरी और परीक्षण को चलाने के लिए है ...
रेमी वर्मी

2
वास्तव में मुझे एहसास हुआ कि मेरा क्षेत्र एक बिंज टाइप था न कि टाईमस्टेम्प। केवल सामग्री एक टाइमस्टैम्प (1328649722) थी, इसलिए इसने काम नहीं किया। अब FROM_UNIXTIME के ​​साथ सब कुछ अच्छा है!
रेमी वर्मी

यह काम ठीक है मैंने इसे डेटाइम के साथ आजमाया क्योंकि मुझे केवल तारीख वाले हिस्से को पाने की जरूरत थी।
एरिक्सिकॉन

10

बस mysql के DATE फ़ंक्शन का उपयोग करें:

mysql> select DATE(mytimestamp) from foo;

5
SELECT DATE(UNIX_TIMESTAMP())spits NULLमेरी MySQL 5.7.14 में
Xenos

DATE (CURRENT_TIMESTAMP) ()
More


2

यदि आप अपने आउटपुट में क्वेरी प्राप्त कर रहे हैं, तो आपको हमें कोड दिखाना होगा जो वास्तव में परिणाम को इकोस करता है। क्या आप उस कोड को पोस्ट कर सकते हैं जो requeteSQL को कॉल करता है?

उदाहरण के लिए, यदि आपने php में सिंगल कोट्स का उपयोग किया है, तो यह वेरिएबल नाम को प्रिंट करेगा, न कि वैल्यू को

echo 'foo is $foo'; // foo is $foo

यह आपकी समस्या की तरह लगता है और मैं सकारात्मक हूं यही कारण है।

इसके अलावा, यह देखने के लिए कि क्या आपको अधिक जानकारी देकर मदद करता है @ चिह्न को हटाने का प्रयास करें।

ताकि

$SQL_result = @mysql_query($SQL_requete); // run the query

हो जाता है

  $SQL_result = mysql_query($SQL_requete); // run the query

यदि क्वेरी किसी त्रुटि को फेंक रही है, तो यह किसी भी त्रुटि दमन को रोक देगा।



2

FROM_UNIXTIME(unix_timestamp, [format]) आपको जो चाहिए वह यह है

FROM_UNIXTIME(user.registration, '%Y-%m-%d') AS 'date_formatted'

FROM_UNIXTIME एक संख्या मान प्राप्त करता है और इसे एक में बदल देता है DATE वस्तु में ,
या यदि एक प्रारूप स्ट्रिंग दिया जाता है, तो यह इसे एक स्ट्रिंग के रूप में लौटाता है।

पुराना समाधान प्रारंभिक तिथि ऑब्जेक्ट प्राप्त करना और इसे दूसरे फ़ंक्शन के साथ प्रारूपित करना था DATE_FORMAT... लेकिन यह अब आवश्यक नहीं है


1

प्रयत्न:

SELECT strftime("%Y-%d-%m", col_name, 'unixepoch') AS col_name

यह मिली-सेकंड में टाइमस्टैम्प को yyyy-mm-dd स्ट्रिंग में प्रारूपित करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.