উদাহরণস্বরূপ পারেন
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
5 এবং 10 নির্বাচন করুন বা এগুলি সীমা থেকে বাদ দেওয়া হয়েছে?
উদাহরণস্বরূপ পারেন
SELECT foo
FROM bar
WHERE foo BETWEEN 5 AND 10
5 এবং 10 নির্বাচন করুন বা এগুলি সীমা থেকে বাদ দেওয়া হয়েছে?
উত্তর:
বিটউইউইন অপারেটর অন্তর্ভুক্ত।
অনলাইন বই থেকে:
পরীক্ষা-এক্সপ্রেসনের মান সূচনা_প্রকাশের মানের চেয়ে বড় বা সমান এবং শেষ_এক্সপ্রেসের মানের চেয়ে কম বা সমান হলে বিটওয়েন সত্য দেয় TR
ডেটটাইম ক্যাভেট
নোট: ডেটটাইমসের সাথে আপনাকে সতর্ক থাকতে হবে; যদি কেবল একটি তারিখ দেওয়া হয় তবে সেই দিন মধ্যরাত হিসাবে মান নেওয়া হয়; আপনার শেষ তারিখের মধ্যে অনুপস্থিত সময়গুলি এড়াতে বা একাধিক রেঞ্জের মধ্যরাতে নিম্নলিখিত দিনের ডেটা ক্যাপচার পুনরাবৃত্তি করতে, আপনার শেষ তারিখটি আপনার তারিখের পরের দিন মধ্যরাতের আগে 3 মিলিসেকেন্ড হওয়া উচিত। 3 মিলিসেকেন্ড কারণ এর চেয়ে কম এবং মানটি পরের দিন মধ্যরাত পর্যন্ত গোল হয়ে যাবে।
উদাহরণস্বরূপ জুন 2016 এর মধ্যে সমস্ত মান পেতে আপনার চালানো দরকার:
where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')
অর্থাত
where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'
একটি তারিখ থেকে 3 এমএস বিয়োগ করা আপনাকে 3 এমএস উইন্ডো থেকে সারিগুলি হারিয়ে যাওয়ার ঝুঁকিতে ফেলে দেবে। সঠিক সমাধানটিও সহজতম:
where myDateTime >= '20160601' AND myDateTime < '20160701'
CONVERT
একটি DATETIME একটি থেকে তারিখ , যে হিসাবে বেহুদা ইনডেক্স প্রতিদান দেবেন। মান ব্যবহার করুন WHERE OrderDate >= '20160601' AND OrderDate < '20160701'
। এছাড়াও, স্থানীয় নির্ভর yyyymmdd
হিসাবে yyyy-mm-dd
যেমন ব্যবহার করতে ভুলবেন না , এবং আপনার সার্ভারের mdy, dmy, ymd, ydm, myd, and dym
সেটিংসের উপর নির্ভর করে ভুল ব্যাখ্যা করা হবে ।
হ্যাঁ, তবে তারিখের মধ্যে ব্যবহারের সময় সতর্কতা অবলম্বন করুন।
BETWEEN '20090101' AND '20090131'
সত্যই 12 টা হিসাবে ব্যাখ্যা করা হয়, বা
BETWEEN '20090101 00:00:00' AND '20090131 00:00:00'
31 শে জানুয়ারীর দিনে ঘটে যাওয়া যে কোনও কিছুই মিস করবে। এই ক্ষেত্রে, আপনাকে ব্যবহার করতে হবে:
myDate >= '20090101 00:00:00' AND myDate < '20090201 00:00:00' --CORRECT!
অথবা
BETWEEN '20090101 00:00:00' AND '20090131 23:59:59' --WRONG! (see update!)
আপডেট : দিনের শেষ দ্বিতীয়টির মধ্যে রেকর্ডগুলি তৈরি করা পুরোপুরি সম্ভব, একটি ডেটটাইম হিসাবে দেরিতে 20090101 23:59:59.997
!!
এই কারণে, BETWEEN (firstday) AND (lastday 23:59:59)
পদ্ধতির প্রস্তাব দেওয়া হয় না।
ব্যবহার করুন myDate >= (firstday) AND myDate < (Lastday+1)
পরিবর্তে পদ্ধতির।
এখানে এই ইস্যুতে ভাল নিবন্ধ ।
WHERE col BETWEEN 'a' AND 'z'
উদাহরণস্বরূপ বেশিরভাগ z সারি বাদ দেয় lude
BETWEEN 5 AND 10
অন্তর্ভুক্ত করার জন্য সাদৃশ্যপূর্ণ 10.2
... এতে অন্তর্ভুক্ত নেই ...
CAST
ing datetime
হিসেবে DATE
কাজ করবে: CAST(DATE_TIME_COL AS DATE) BETWEEN '01/01/2009' AND '01/31/2009'
।
It is entirely possible to have records created within that last second of the day, with a datetime as late as 01/01/2009 23:59:59.997
<- পারিনি আপনি শুধু তারপর ব্যবহার AND '01/31/2009 23:59:59.99999999'
বা যদিও বহু 9 এর প্রয়োজন হয়
এসকিউএল সার্ভার ২০০৮ থেকে আসল বিশ্বের উদাহরণ।
উৎস তথ্য:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
3 2010-05-01 00:00:00.000
4 2010-07-31 00:00:00.000
প্রশ্ন:
SELECT
*
FROM
tbl
WHERE
Start BETWEEN '2010-04-01 00:00:00' AND '2010-05-01 00:00:00'
ফলাফল:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
ID = 3
বাদ কেন ? এর Start
মান BETWEEN
উপরের-সীমাবদ্ধ মানের সমান এবং BETWEEN
এটি একটি অন্তর্ভুক্ত ব্যাপ্তি, কোনও একচেটিয়া উপরের-সীমানা সীমা নয়।
আপনি যদি এটি হিট করেন, এবং কোডটিতে কোনও দিন যুক্ত করার চেষ্টা করতে এবং পরিচালনা করতে চান না, তবে ডিবি এটি করতে দিন ..
myDate >= '20090101 00:00:00' AND myDate < DATEADD(day,1,'20090101 00:00:00')
যদি আপনি সময়ের অংশটি অন্তর্ভুক্ত করেন: নিশ্চিত করুন এটি মধ্যরাতের উল্লেখ করেছে। অন্যথায় আপনি কেবল সময় বাদ দিতে পারেন:
myDate >= '20090101' AND myDate < DATEADD(day,1,'20090101')
এবং এটি সম্পর্কে চিন্তা করবেন না।
যাদের মধ্যে হয়েছে (লেনদেন-এসকিউএল)
পরীক্ষার জন্য একটি ( এন ) ( সমেত ) ব্যাপ্তি নির্দিষ্ট করে।
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
যুক্তি
test_expression
প্রারম্ভিক_প্রকাশ এবং শেষ_প্রেমী দ্বারা সংজ্ঞায়িত ব্যাপ্তির জন্য পরীক্ষা করা এক্সপ্রেশন। টেস্ট_এক্সপ্রেশনটি অবশ্যই প্রারম্ভ_এক্সপ্রেশন এবং শেষ_এক্সপ্রেশন উভয়ের মতোই ডেটা টাইপ হতে হবে।
NOT
সুনির্দিষ্ট করে যে ভবিষ্যদ্বাণীকারীটির ফলাফলটি উপেক্ষিত হবে।
begin_expression
কোন বৈধ এক্সপ্রেশন। start_expression অবশ্যই টেস্ট_এক্সপ্রেশন এবং end_expression উভয়ের মতোই ডেটা টাইপ হওয়া উচিত।
end_expression
কোন বৈধ এক্সপ্রেশন। end_expression অবশ্যই টেস্ট_এক্সপ্রেশন এবং আর্টিং এক্সপ্রেশন উভয়ের মতোই ডেটা টাইপ হওয়া উচিত।
AND
প্লেসহোল্ডার হিসাবে কাজ করে যা টেস্ট_এক্সপ্রেশন নির্দেশ করে শুরু_প্রেম এবং শেষ_আমাকর্ষণ দ্বারা নির্দেশিত সীমার মধ্যে হওয়া উচিত।
মন্তব্য
একচেটিয়া পরিসীমা নির্দিষ্ট করতে, (>) এর চেয়ে বেশি এবং অপারেটর (<) এর চেয়ে কম ব্যবহার করুন। যদি ভবিষ্যতে বিকেলে বা ভবিষ্যদ্বাণী অনুসারে কোনও ইনপুট যদি নাল হয় তবে ফলাফলটি অজানা।
ফলাফলের মান
পরীক্ষা-এক্সপ্রেসনের মান সূচনা_প্রকাশের মানের চেয়ে বড় বা সমান এবং শেষ_এক্সপ্রেসের মানের চেয়ে কম বা সমান হলে বিটওয়েন সত্য দেয় TR
টেস্ট_এক্সপ্রেসনের মান সূচনা_প্রকাশের মানের চেয়ে কম বা শেষ_একটি চাপের মানের চেয়ে বেশি হলে সত্য নয় B
কলামের ডেটা টাইপ যদি তারিখের সময় হয় তবে তারিখের সময় থেকে সময় নির্মূল করতে এবং কেবল তারিখের ব্যাপ্তির মধ্যে তুলনা করতে আপনি এইগুলি করতে পারেন।
where cast(getdate() as date) between cast(loginTime as date) and cast(logoutTime as date)
এটি সীমানা অন্তর্ভুক্ত না।
declare @startDate date = cast('15-NOV-2016' as date)
declare @endDate date = cast('30-NOV-2016' as date)
create table #test (c1 date)
insert into #test values(cast('15-NOV-2016' as date))
insert into #test values(cast('20-NOV-2016' as date))
insert into #test values(cast('30-NOV-2016' as date))
select * from #test where c1 between @startDate and @endDate
drop table #test
RESULT c1
2016-11-15
2016-11-20
2016-11-30
declare @r1 int = 10
declare @r2 int = 15
create table #test1 (c1 int)
insert into #test1 values(10)
insert into #test1 values(15)
insert into #test1 values(11)
select * from #test1 where c1 between @r1 and @r2
drop table #test1
RESULT c1
10
11
15
আমি সর্বদা এটি ব্যবহার করেছি:
যেখানে আমার প্রথম তারিখ এবং সূচনা তারিখের শেষে (শেষ তারিখ + 1)