প্রশ্ন: এসকিউএল এর বিটওয়াইন কেন অন্তর্ভুক্ত?
উত্তর: এসকিউএল ভাষা ডিজাইনাররা একটি দুর্বল নকশার সিদ্ধান্ত নিয়েছে, যাতে তারা সিনট্যাক্স সরবরাহ করতে ব্যর্থ হয়েছে যা বেটউইভেনের 4 টি রূপগুলির (বদ্ধ, অর্ধ-খোলা-বাম, আধ-খোলা-ডান, বা খোলার জন্য) বিকাশকারীদের নির্দিষ্ট করতে সক্ষম করবে ) তারা পছন্দ করবে।
প্রস্তাবনা: এসকিউএল স্ট্যান্ডার্ড সংশোধন না করা অবধি / তারিখ / বারের জন্য বিটউইইন ব্যবহার করবেন না। পরিবর্তে আপনার BETWEEN রেঞ্জের শুরু এবং শেষ সীমানায় স্বাধীন শর্ত হিসাবে DATE রেঞ্জের তুলনা কোডিংয়ের অভ্যাসে প্রবেশ করুন। এটি কিছুটা ভার্বোজ, তবে আপনাকে এমন শর্ত লিখতে দেবে যা স্বজ্ঞাত (যেভাবে বগি হওয়ার সম্ভাবনা কম) এবং ডাটাবেস অপ্টিমাইজারের কাছে পরিষ্কার হয়ে যায়, সর্বোচ্চ কার্যকর প্রয়োগের পরিকল্পনা নির্ধারণ করার জন্য এবং সূচকগুলি ব্যবহার করার অনুমতি দেয়।
উদাহরণস্বরূপ, যদি আপনার ক্যোয়ারী কোনও ইনপুট দিনের স্পেসিফিকেশন গ্রহণ করে এবং সেই তারিখে পড়েছে এমন সমস্ত রেকর্ড ফিরিয়ে দিতে পারে, আপনি কোডটি লিখবেন:
WHERE DATE_FIELD >= :dt AND DATE_FIELD < :dt+1
BETWEEN ঝুঁকিপূর্ণ পারফরম্যান্স সমস্যা এবং / অথবা বগি কোড ব্যবহার করে যুক্তি লেখার চেষ্টা করছেন। তিনটি সাধারণ মিসটপস:
1) WHERE DATE_FIELD BETWEEN :dt AND :dt+1
এটি প্রায় অবশ্যই একটি বাগ - ব্যবহারকারী নির্দিষ্ট তারিখের জন্য কেবল রেকর্ডগুলি দেখতে প্রত্যাশা করে, তবুও একদিন পরের দিন সকাল 12 টা থেকে রেকর্ড সম্বলিত একটি প্রতিবেদনটি সরিয়ে ফেলবে।
2) WHERE TRUNC(DATE_FIELD) = :dt
সঠিক উত্তর দেয়, তবে DATE_FIELD এ ফাংশনটি প্রয়োগ করা সর্বাধিক সূচী / পরিসংখ্যানকে অকেজো হিসাবে উপস্থাপন করে (যদিও কখনও কখনও ডিবিএগুলি ফাংশন-ভিত্তিক সূচীগুলি তারিখের ক্ষেত্রগুলিতে যোগ করার চেষ্টা করবে - এখনও মান-ঘন্টা এবং ডিস্ক স্পেস জ্বালিয়ে এবং আইইউডিতে ওভারহেড যোগ করে টেবিলে অপারেশন)
3) WHERE EVENT_DATE BETWEEN :dt AND :dt + 1-1/24/60/60
টম কিট, ওরাকল গুরু অসাধারণ, এই-কম-মার্জিত (আইএমও) সমাধানের পরামর্শ দিয়েছেন। আপনি "1-1 / 24/06/60" সন্ধানের জন্য "1-1 / 24/06/60" না পাওয়া অবধি দুর্দান্ত কাজ করে যা অসম্পূর্ণ ফলাফল দেয় ... বা আপনি দুর্ঘটনাক্রমে একটি টাইমস্ট্যাম্প ক্ষেত্রে ব্যবহার না করা অবধি। এছাড়াও, এটি কিছুটা মালিকানাধীন; ওরাকল এর তারিখের ডেটা টাইপের সাথে সামঞ্জস্যপূর্ণ (যা দ্বিতীয়টিতে ট্র্যাক করে) তবে বিভিন্ন ডেটাবেস পণ্যগুলির তারিখ / TIME যথার্থতার সাথে সামঞ্জস্য করা দরকার।
সমাধান: ক্লোজড / ইনক্লুসিভ ডিফল্ট বিকল্পগুলির বিশদকরণ সমর্থন করার জন্য বিটউইউন সিনট্যাক্সটি সংশোধন করে এসকিউএল ল্যাঙ্গুয়েজ স্পেসকে বাড়ানোর জন্য এএনএসআই এসকিউএল কমিটির কাছে আবেদন করুন committee এরকম কিছু কৌশলটি করবে:
expr1 এর মধ্যে বিগত 2 এক্সপ্রেস [ অন্তর্ভুক্ত [ব্যবহার করুন] | EXCL [USIVE]] এবং expr3 [ INCL [USIVE] | EXCL [ব্যবহার করা]]
প্রকাশ করা কত সহজ হয়ে যায় তা বিবেচনা করুন WHERE DATE_FIELD BETWEEN :dt INCLUSIVE AND :dt+1 EXCLUSIVE
(বা ন্যায়সঙ্গত WHERE DATE_FIELD BETWEEN :dt AND :dt+1 EXCL
)
হতে পারে এএনএসআই এসকিউএল: 2015?