মাইএসকিউএলে
select * from record where register_date like '2009-10-10%'
এসকিউএল সার্ভারের সিনট্যাক্সটি কী?
মাইএসকিউএলে
select * from record where register_date like '2009-10-10%'
এসকিউএল সার্ভারের সিনট্যাক্সটি কী?
DATETIME
স্ট্রিংয়ের মতো মানগুলি কেন খারাপ ব্যবহার করা এবং এটি ব্যবহারে কেন খারাপ হতে পারে BETWEEN
বা তা সহ >= AND <=
), অ্যারন বারট্র্যান্ডের এই ব্লগটি দেখুন ।
5
জন্য কমপক্ষে ভোট রয়েছে । আমি দয়া করে অনুরোধ করতে পারি যে আপনি প্রতিশব্দ হিসাবে sql- মত প্রস্তাব ?
উত্তর:
আপনি তারিখ পার্ট () ফাংশনটি ব্যবহার করতে পারেন
SELECT * FROM record
WHERE (DATEPART(yy, register_date) = 2009
AND DATEPART(mm, register_date) = 10
AND DATEPART(dd, register_date) = 10)
আমি এই পদ্ধতিটি পড়ার পক্ষে সহজ মনে করি কারণ এটি সময়ের উপাদানটিকে উপেক্ষা করে এবং আপনার বাছাইকে সীমাবদ্ধ রাখতে আপনাকে পরের দিনের তারিখটি ব্যবহার করতে হবে না। আপনি যথাযথ ডেট পার্ট কোড ব্যবহার করে অতিরিক্ত ক্লজ যুক্ত করে বৃহত্তর বা কম গ্রানুলারিটিতে যেতে পারেন eg
AND DATEPART(hh, register_date) = 12)
12 এবং 1 এর মধ্যে তৈরি রেকর্ড পেতে।
বৈধ আর্গুমেন্টের সম্পূর্ণ তালিকার জন্য এমএসডিএন তারিখ পার্টস ডক্সের সাথে পরামর্শ করুন ।
DATETIME ভেরিয়েবলের বিপরীতে লাইক অপারেটরের জন্য সরাসরি সমর্থন নেই তবে আপনি সর্বদা DATETIME কে একটি VARCHAR এ কাস্ট করতে পারেন:
SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
কনভার্ট ফাংশনে উপলব্ধ "স্টাইল" এর সম্পূর্ণ তালিকার জন্য এমএসডিএন ডক্স পরীক্ষা করে দেখুন ।
মার্ক
WHERE CONVERT(VARCHAR(25), register_date, 25) LIKE '2009-10-10%'
আপনি যদি এটি করেন তবে আপনি স্ট্রিং রূপান্তর করতে বাধ্য করছেন। শুরু / শেষের তারিখের সীমাটি তৈরি করা এবং ব্যবহার করা ভাল:
declare @start datetime, @end datetime
select @start = '2009-10-10', @end = '2009-11-10'
select * from record where register_date >= @start
and register_date < @end
এটি এটি register_date
টেবিল স্ক্যানের পরিবর্তে সূচকটি (যদি সেখানে থাকে তবে ) ব্যবহারের অনুমতি দেবে ।
আপনি পাঠ্য আকারে তারিখ পেতে কনভার্ট ব্যবহার করতে পারেন। যদি আপনি এটিকে একটি ভারচারে রূপান্তর করেন (10), আপনি পছন্দ করতে পরিবর্তে = ব্যবহার করতে পারেন:
select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
বা আপনি একটি উপরের এবং নীচের সীমানা তারিখটি ব্যবহার করতে পারেন, এটি অতিরিক্ত উপকারের সাথে এটি সূচকটি ব্যবহার করতে পারে:
select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'
দুর্ভাগ্যক্রমে, 'লাইক' ব্যবহার করে বারচারের সাথে ডেটটাইম তুলনা করা সম্ভব নয় তবে কাঙ্ক্ষিত আউটপুট অন্য উপায়ে সম্ভব।
select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0
LIKE
অপারেটর মাস বা তারিখ এরকমভাবে তারিখ অংশের সাথে কাজ করে না কিন্তু DATEPART
অপারেটর আছে।
যার খোলার তারিখ 1 ম এ ছিল সমস্ত অ্যাকাউন্ট সন্ধানের আদেশ
SELECT *
FROM Account
WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1`
* কাস্টিং OpenDt
কারণ এর মানটি DATETIME
কেবলমাত্র নয় DATE
।
এসকিউএল সার্ভারে তারিখগুলির জন্য LIKE অপারেটরের একটি খুব ফ্ল্যাঙ্ক কভারেজ রয়েছে। এটি কেবল আমেরিকান তারিখের ফর্ম্যাট ব্যবহার করে কাজ করে। উদাহরণ হিসাবে আপনি চেষ্টা করতে পারেন:
... WHERE register_date LIKE 'oct 10 2009%'
আমি এটি এসকিউএল সার্ভার 2005 এ পরীক্ষা করেছি এবং এটি কাজ করে, তবে আপনাকে সত্যই বিভিন্ন সংমিশ্রণ চেষ্টা করতে হবে। অদ্ভুত জিনিস আমি লক্ষ্য করেছি:
আপনি কেবলমাত্র তারিখের মধ্যে বিভিন্ন উপক্ষেত্রের জন্য সমস্ত কিছু না কিছু পেয়েছেন বলে মনে হচ্ছে, উদাহরণস্বরূপ, আপনি যদি 'এপ্রিল 2%' অনুসন্ধান করেন তবে কেবলমাত্র 20 এর দশকে কিছু পাওয়া যাবে - এটি ২ য় এর বাদ পড়ে।
একটি একক আন্ডারস্কোর ব্যবহার _ 'একটি একক (ওয়াইল্ডকার্ড) চরিত্র প্রতিনিধিত্ব করতে বিলকুল কাজ, উদাহরণস্বরূপ, নেই WHERE mydate LIKE 'oct _ 2010%'
হবে না সকল তারিখ আসতে সামনে 10th - এটা সব সময়ে কিছুই ফেরৎ, আসলে!
ফর্ম্যাটটি কঠোর আমেরিকান: ' mmm dd yyyy hh:mm
'
লাইকিং সেকেন্ডের জন্য প্রক্রিয়াটি পেরেক করা আমার পক্ষে কঠিন হয়ে পড়েছে, তাই যদি কেউ এটিকে আরও কিছুটা এগিয়ে নিতে চান তবে আমার অতিথি হোন!
আশাকরি এটা সাহায্য করবে.
আমি এই থ্রেডটি থেকে একটু দেরি করেছি তবে আসলে এমএস এসকিউএল সার্ভারে লাইক অপারেটরের জন্য সরাসরি সমর্থন রয়েছে।
LIKE সাহায্যে নথিভুক্ত হিসাবে যদি ডেটাটাইপটি স্ট্রিং না হয় তবে এটিকে স্ট্রিনে রূপান্তরিত করার চেষ্টা করা হয়। এবং নিক্ষিপ্ত হিসাবে নথি হিসাবে ডকুমেন্টেশন রূপান্তর:
স্ট্রিং-এ ডিফল্ট ডেটটাইম রূপান্তরটি টাইপ হয় 0 (, 100) যা সোম ডিডি ইয়াই এইচ: মিয়াম (বা প্রধানমন্ত্রী)।
আপনার যদি ডিবিতে এই জাতীয় তারিখ থাকে:
2015-06-01 11:52:59.057
এবং আপনি এর মতো প্রশ্নগুলি করেন:
select * from wws_invoice where invdate like 'Jun%'
select * from wws_invoice where invdate like 'Jun 1%'
select * from wws_invoice where invdate like 'Jun 1 %'
select * from wws_invoice where invdate like 'Jun 1 2015:%'
select * from wws_invoice where invdate like 'Jun ? 2015%'
...
select * from wws_invoice where invdate like 'Jun 1 2015 11:52AM'
আপনি যে সারি পেতে।
যাইহোক, এই তারিখের ফর্ম্যাটটি প্রস্তাব দেয় যে এটি একটি ডেটটাইম 2 , তারপরে ডকুমেন্টেশন বলে:
21 বা 121 - ওডিবিসি ক্যানোনিকাল (মিলিসেকেন্ড সহ) সময়, তারিখ, তারিখের সময় 2 এবং ডেটটাইমসেটের জন্য ডিফল্ট। - ইয়ে-মিমি-ডিডি এইচ: মাইল: এসএসএমএমএম (24 ঘন্টা)
এটি এটিকে সহজ করে তোলে এবং আপনি এটি ব্যবহার করতে পারেন:
select * from wws_invoice where invdate like '2015-06-01%'
এবং চালানের রেকর্ড পান। এখানে একটি ডেমো কোড রয়েছে:
DECLARE @myDates TABLE (myDate DATETIME2);
INSERT INTO @myDates (myDate)
VALUES
('2015-06-01 11:52:59.057'),
('2015-06-01 11:52:59.054'),
('2015-06-01 13:52:59.057'),
('2015-06-01 14:52:59.057');
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11:52:59%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11:52:59.054%';
স্ট্রিংয়ে কোনও রূপান্তর ছাড়াই এসকিউএল সার্ভারে ডেটটাইম অনুসন্ধান করা সর্বদা সমস্যাযুক্ত। প্রতিটি তারিখের অংশ পাওয়া একটি ওভারকিল (যা সম্ভবত কোনও সূচক ব্যবহার করে)। সম্ভবত আপনি যখন স্ট্রিং রূপান্তর ব্যবহার করবেন না তখন আরও ভাল উপায় হ'ল রেঞ্জ চেক ব্যবহার করা। অর্থাত:
select * from record
where register_date >= '20091010' and register_date < '20091011';
আমি আমার সমস্যাটি সেভাবেই সমাধান করেছি। উন্নতির জন্য পরামর্শের জন্য আপনাকে ধন্যবাদ। সি # তে উদাহরণ।
string dd, mm, aa, trc, data;
dd = nData.Text.Substring(0, 2);
mm = nData.Text.Substring(3, 2);
aa = nData.Text.Substring(6, 4);
trc = "-";
data = aa + trc + mm + trc + dd;
"Select * From bdPedidos Where Data Like '%" + data + "%'";