মাইএসকিউএলে কেবলমাত্র তারিখের প্যারামিটারের সাথে টাইমস্ট্যাম্পের তারিখগুলি কীভাবে তুলনা করবেন?


91

একটি এসকিউএল বিবৃতিতে, আমি কীভাবে টাইমস্ট্যাম্প হিসাবে সংরক্ষিত তারিখটি YYYY-MM-DD ফর্ম্যাটের একটি তারিখের সাথে তুলনা করব?

প্রাক্তন: SELECT * FROM table WHERE timestamp = '2012-05-25'

আমি চাই যে এই ক্যোয়ারী নির্দিষ্ট দিনে টাইমস্ট্যাম্পযুক্ত সমস্ত সারি ফিরিয়ে দেয় তবে এটি মধ্যরাতের টাইমস্ট্যাম্পযুক্ত সারিগুলি কেবল ফেরত দেয়।

ধন্যবাদ

উত্তর:


149

DATE()টাইমস্ট্যাম্পের তারিখের অংশটি বের করতে আপনি ফাংশনটি ব্যবহার করতে পারেন :

SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-25'

যদিও টাইমস্ট্যাম্প কলামে আপনার একটি সূচক রয়েছে, এটি দ্রুত হবে কারণ এটি টাইমস্ট্যাম্প কলামে একটি সূচক ব্যবহার করতে পারে যদি আপনার একটি থাকে:

SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-25 00:00:00' AND '2012-05-25 23:59:59'

6
একটি ছোট পরীক্ষার মধ্য দিয়ে আমি সবেমাত্র দৌড়েছি, আমি
বেটউইইনকে

4
এমন কোনও তারিখ ব্যবহার করুন যেখানে এটি কী সংখ্যার অর্থ কী ধরণের তা পরিষ্কার।
লুকাশ সালিখ


7

কারও পরামর্শ অনুসারে, DATE(timestamp)আপনি কলামে ম্যানিপুলেশন প্রয়োগ করছেন এবং সুতরাং আপনি সূচী ক্রম উপর নির্ভর করতে পারবেন না।

তবে, BETWEENআপনি যদি মিলিসেকেন্ডগুলি অন্তর্ভুক্ত করেন তবে ব্যবহার করা নির্ভরযোগ্য। উদাহরণস্বরূপ উদাহরণস্বরূপ BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'আপনি 2012-05-05 23:59:59.001এবং এর মধ্যে একটি টাইমস্ট্যাম্প সহ রেকর্ডগুলি বাদ দেন 2012-05-05 23:59:59.999। যাইহোক, এমনকি এই পদ্ধতিতে কিছু সমস্যা রয়েছে, কারণ ডেটাটাইপগুলি যথার্থ হয়। মাঝেমধ্যে 999 মিলিসেকেন্ড গোল হয়ে যায়।

সবচেয়ে ভাল জিনিসটি হ'ল:

SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'

5
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00' 
    AND timestamp <= '2012-05-05 23:59:59'

2

MYSQL এর একটি রূপান্তর ফাংশন ব্যবহার করুন:

SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05' 

এই কাজ করা উচিত


1

যখন আমি এটি নিয়ে গবেষণা করছিলাম তখন আমি ভেবেছিলাম যে নির্দিষ্ট অ-স্থিত / স্ট্রিংয়ের তারিখের পরিবর্তে একটি পরিবর্তনের তারিখ বা আজকের মতো একটি উদাহরণ দেখানোর জন্য বেটউইউন সমাধানটি সংশোধন করা ভাল হবে CURRENT_DATE()। এই লগ_টাইমস্ট্যাম্প কলামে সূচি ব্যবহার করবে

SELECT *
FROM some_table
WHERE
    log_timestamp
    BETWEEN 
        timestamp(CURRENT_DATE()) 
    AND # Adds 23.9999999 HRS of seconds to the current date
        timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL '86399.999999' SECOND_MICROSECOND));

পরের দিন 12am কেসটি এড়াতে আমি সেকেন্ড / মাইক্রোসেকেন্ডগুলি করেছি। তবে আপনি আরও পাঠক-বান্ধব-বিটওয়াইন পদ্ধতির তুলনা অপারেটরগুলির মাধ্যমে `ইন্টারভাল '1 দিন' করতে পারেন:

SELECT *
FROM some_table
WHERE
    log_timestamp >= timestamp(CURRENT_DATE()) AND
    log_timestamp < timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY));

এই উভয় পদ্ধতিরই সূচকটি ব্যবহার করবে এবং দ্রুত আরও অনেক কিছু করা উচিত। উভয়ই সমান তত দ্রুত বলে মনে হয়।


0

আপনি যদি ক্যোয়ারি চালানোর জন্য এসকিউএল পরামিতি ব্যবহার করছেন তবে এটি সহায়ক হবে

SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')

0

আমি যখন আপনার প্রশ্নটি পড়ি তখন আমি ভেবেছিলাম যে আপনি 'মাইএসকিউএল' ট্যাগটি না পাওয়া পর্যন্ত আপনি ওরাকল ডিবিতে রয়েছেন। যাইহোক, ওরাকলের সাথে কাজ করা লোকদের জন্য এখানে উপায়:

SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');

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