মাইএসকিউএল: কীভাবে সেকেন্ডে দুটি টাইমস্ট্যাম্পের মধ্যে পার্থক্য পাওয়া যায়


101

মাইএসকিউএলে এমন কোনও উপায় রয়েছে যা আমাকে সেকেন্ডে দুটি টাইমস্ট্যাম্পের মধ্যে পার্থক্য দেবে, বা পিএইচপি-তে আমার এটি করা দরকার? এবং যদি তা হয় তবে আমি কীভাবে তা করতে যাব?

উত্তর:


178

আপনি নিম্নলিখিত TIMEDIFF()এবং TIME_TO_SEC()ফাংশন ব্যবহার করতে পারেন :

SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
|   60 |
+------+
1 row in set (0.00 sec)

আপনি অন্য উত্তরটিতে @ আম্বর প্রস্তাবিতUNIX_TIMESTAMP() হিসাবে ফাংশনটি ব্যবহার করতে পারেন :

SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') - 
       UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
|   60 |
+------+
1 row in set (0.00 sec)

আপনি যদি TIMESTAMPডেটা টাইপ ব্যবহার করে থাকেন তবে আমি অনুমান করি যে UNIX_TIMESTAMP()সমাধানটি কিছুটা দ্রুততর হবে, যেহেতু TIMESTAMPমানগুলি ইতিপূর্বে ( উত্স ) থেকে সেকেন্ডের সংখ্যাকে উপস্থাপন করে একটি পূর্ণসংখ্যা হিসাবে ইতিমধ্যে সংরক্ষণ করা হয় । দস্তাবেজগুলি উদ্ধৃত করা হচ্ছে :

যখন UNIX_TIMESTAMP()কোনও TIMESTAMPকলামে ব্যবহৃত হয় , তখন ফাংশনটি অভ্যন্তরীণ টাইমস্ট্যাম্প মানটি প্রত্যক্ষভাবে প্রদান করে, কোনও অন্তর্নিহিত "স্ট্রিং-থেকে-ইউনিক্স-টাইমস্ট্যাম্প" রূপান্তর ছাড়াই।

মনে রাখবেন যে TIMEDIFF() ডেটা রিটার্ন করুনTIMETIMEমানগুলি '-838: 59: 59' থেকে '838: 59: 59' পর্যন্ত হতে পারে (প্রায় 34.96 দিন)


13
আপনি TIMESTAMPDIFF ব্যবহার করতে পারেন , এটি এটি একটি একক ফাংশনে করে - কেবলমাত্র unitপ্যারামিটার সেট করে SECOND
মাইক

পারফরম্যান্স ব্যাখ্যার জন্য +1। আমি ইউনিক্স টাইমস্ট্যাম্প () ব্যবহার করছিলাম না কারণ আমি ভেবেছিলাম এটি আরও বেশি সময় নেবে।
এলকুল

55

"টাইমস্ট্যামডিডিএফএফ" সম্পর্কে কীভাবে:

SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-function.html#function_timestampdiff


যদি আপনার তারিখ কলামটি অন্য কোনও ফর্মের মধ্যে থাকে তবে YYYY-MM-DD এটি করার চেষ্টা করে: str_to_date(date_column, '%m/%d/%Y')TIMESTAMPDIFF ফাংশনটির মধ্যে কলামটির জন্য এটির ফর্ম্যাটিংটি সংশোধন করা দরকার।
বৃহত্তর কিংস

এই একটি ভাল যেহেতু আমার জন্য উত্তর TIME_TO_SECএ maxes 3020399এই আয় যেহেতু সঠিক মান।
বিলিএনঃ

21
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)

আপনি যদি স্বাক্ষরবিহীন পার্থক্য করতে চান ABS()তবে প্রকাশের চারপাশে একটি যুক্ত করুন ।

বিকল্পভাবে, আপনি ব্যবহার করতে পারেন TIMEDIFF(ts1, ts2)এবং তারপরে সময় ফলাফলটি সেকেন্ডে রূপান্তর করতে পারেন TIME_TO_SEC()


11

মনে রাখবেন যে, TIMEDIFF()সমাধান কেবলমাত্র তখনই কাজ যখন datetimesহয় কম 35 দিন পৃথক্! TIMEDIFF()একটি TIMEডেটাটাইপ প্রদান করে, এবং TIME এর সর্বাধিক মান হয় 838: 59: 59 ঘন্টা (= 34,96 দিন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.