মাইক্রোসফ্ট এসকিউএল সার্ভারে কেবল তারিখটি ব্যবহার করে DATETIME ক্ষেত্রটি কীভাবে জিজ্ঞাসা করবেন?


90

আমার DATETIMEমত একটি ক্ষেত্রের সাথে একটি টেবিল টেস্ট আছে :

ID NAME DATE
1 TESTING 2014-03-19 20:05:20.000

এই সারিটি এবং প্রতিটি সারি 03/19/2014 তারিখের সাথে ফেরত দেওয়ার জন্য আমার কী জিজ্ঞাসা দরকার, সময়টি যাই হোক না কেন। আমি ব্যবহার করার চেষ্টা করেছি

select * from test where date = '03/19/2014';

তবে এটি কোনও সারি দেয় না। আমি যে কাজটি পেয়েছি তার একমাত্র উপায় হ'ল তারিখের সময় অংশ সরবরাহ করা:

select * from test where date = '03/19/2014 20:03:02.000';

উত্তর:


129

ব্যবহারের ব্যাপ্তি, বা ডেটডিফ ফাংশন

 select * from test 
 where date between '03/19/2014' and '03/19/2014 23:59:59'

বা

 select * from test 
 where datediff(day, date, '03/19/2014') = 0

অন্যান্য বিকল্পগুলি হ'ল:

  1. আপনার যদি ডাটাবেস স্কিমা নিয়ন্ত্রণ করে এবং আপনার সময় ডেটা প্রয়োজন হয় না, এটি বাইরে নিয়ে যান।

  2. বা, যদি আপনাকে এটি অবশ্যই রাখতে হয় তবে একটি গণিত কলামের বৈশিষ্ট্য যুক্ত করুন যাতে তারিখের মানটির সময় অংশটি ছিনিয়ে নেওয়া হয় ...

Alter table Test Add DateOnly As DateAdd(day, datediff(day, 0, date), 0)

বা, এসকিউএল সার্ভারের আরও সাম্প্রতিক সংস্করণগুলিতে ...

Alter table Test Add DateOnly As Cast(DateAdd(day, datediff(day, 0, date), 0) as Date)

তারপরে আপনি নিজের ক্যোয়ারীটি সহজভাবে লিখতে পারেন:

select * from test 
where DateOnly = '03/19/2014'

ঠিক আছে, এটি কাজ করে, তবে আমি ভাবছিলাম যে কোনও সহজ উপায় আছে কিনা।
delphirules

ঠিক আছে, কেবলমাত্র দ্বিতীয় সহজ উপায় হ'ল প্রথম ডেটাবেজে ডাটা ডেটা স্থাপন করা ... বা এমন একটি গুণিত গুণ তৈরি করা যা সময়ের অংশকে সরিয়ে দেয় এবং এটি ব্যবহার করে ... আমি আমার উত্তরে উভয় বিকল্প যুক্ত করেছি।
চার্লস ব্রেটানা 14

আমি উদ্বিগ্ন ছিলাম যে তারিখগুলির 'দিন' অংশ একই হিসাবে 4/19/2014 বা 3/19/2015 এর মতো তারিখগুলির জন্য DATEDIFF পদ্ধতি সত্য (অনস্বীকার্য) ফিরে আসবে (এবং আমি অন্য কোথাও রিপোর্ট দেখেছি যে এটি হবে এই পদ্ধতিতে কাজ করুন) তবে আমি এটি একটি ডাটাবেসের বিরুদ্ধে পরীক্ষা করেছি এবং এটি সঠিকভাবে কাজ করছে বলে মনে হচ্ছে।
mono código

হ্যাঁ, কারণ DateDiff()ফাংশনটি তার সমস্ত রূপগুলিতে , গণনা করে এবং তারিখের সীমাগুলির সংখ্যা প্রদান করে যা এক তারিখে অন্য তারিখে ফ্রিলম পেতে অবশ্যই পার হতে হবে। এই কারণেই DateDiff(day, '1Jan2016', '31Dec2017 23:259:59')এবং DateDiff(day, '31Dec2016 23:259:59', '1Jan2017 ') উভয়ই ফিরে আসে 1
চার্লস ব্রেটানা

56

সরল উত্তর;

select * from test where cast ([date] as date) = '03/19/2014';

যদিও এটি একটি বৈধ উত্তর আমি কোনও ফাংশনের পিছনে মূল্যায়ন করার তারিখের ক্ষেত্রটি রাখার বিষয়টি উল্লেখ করতে চাই performance তারিখের কোনও সূচক অকেজো হবে এবং ইঞ্জিনটি প্রতিটি সারির মূল্যায়ন করতে হবে
জিন

21

আমি মাইএসকিউএল 5.6 ব্যবহার করছি এবং তারিখের সময় থেকে কেবল তারিখের অংশটি বের করতে একটি তারিখ ফাংশন রয়েছে। সুতরাং প্রশ্নের সহজ সমাধান হ'ল -

 select * from test where DATE(date) = '2014-03-19';

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-funitions.html


4
প্রশ্ন
স্কেল

7
select * from test 
where date between '03/19/2014' and '03/19/2014 23:59:59'

এটি একটি সত্যই খারাপ উত্তর। দুটি কারণে।

১. ২৩.৫৯.৫৯..7০০ ইত্যাদির মতো সময়গুলির সাথে কী ঘটে :5 ইত্যাদি 23

২. আচরণটি ডেটাটাইপের উপর নির্ভর করে। ডেটটাইম / ডেট / ডেটটাইম 2 ধরণের জন্য ক্যোয়ারী আলাদাভাবে আচরণ করে।

23: 59: 59.999 দিয়ে পরীক্ষা করা আরও খারাপ করে তোলে কারণ ডেট টাইপের উপর নির্ভর করে আপনি বিভিন্ন রাউন্ডিং পান।

select convert (varchar(40),convert(date      , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime  , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime2 , '2014-03-19 23:59:59.999'))

- তারিখের জন্য মানটি 'কাটা' হয়। - ডেটটাইমের জন্য মানটি পরের তারিখের চেয়ে বড় হয়। (নিকটতম মান)। - ডেটটাইম 2 এর জন্য মানটি সুনির্দিষ্ট।


7

এটি এমএস এসকিউএল সার্ভারের জন্য আমার পক্ষে কাজ করে:

select * from test
where 
year(date) = 2015
and month(date) = 10
and day(date)= 28 ;


1

আপনি এটি চেষ্টা করতে পারেন

select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';

4
আপনাকে ধন্যবাদ, তবে আমি মনে করি সহজ সমাধানটি সময়ের সাথে তুলনা হবে ঠিক আগের সমাধানের মতোই।
ডেলফিরুলস

0

আপনি এই পদ্ধতির ব্যবহার করতে পারেন যা সময়ের অংশকে ছিন্ন করে:

select * from test
where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)

0
-- Reverse the date format
-- this false:
    select * from test where date = '28/10/2015'
-- this true:
    select * from test where date = '2015/10/28'

4
আপনার উত্তরে কিছু ব্যাখ্যা যোগ করুন!
এস

এটি কাজ করে না কারণ '2015/10/28 00: 00.001' '2015/10/28' থেকে আলাদা
পেড্রো C88

0

এটি কেবল আপনার WHEREঅনুচ্ছেদে ব্যবহার করুন ।

নীচে "জমা দিন" অংশটি কলামের নাম, সুতরাং নিজের নিজস্ব ownোকান।

এটি ফলাফলগুলি কেবলমাত্র "বছরের" অংশে ফিরে আসবে, মিনিট বাদ দেবে ইত্যাদি

Where datepart(year, SubmitDate) = '2017'

0
select *, cast ([col1] as date) <name of the column> from test where date = 'mm/dd/yyyy'

"কল 1" হ'ল তারিখ এবং সময় সহ কলামটির
নাম <কলামটির নাম> এখানে আপনি পছন্দ অনুযায়ী নাম পরিবর্তন করতে পারেন


0
select *
  from invoice
 where TRUNC(created_date) <=TRUNC(to_date('04-MAR-18 15:00:00','dd-mon-yy hh24:mi:ss'));

0

তারিখ এবং ভাষা নিয়ে সমস্যা রয়েছে এবং এটি এড়ানোর উপায়টি এই ওয়াইওয়াইওয়াইএমএমডিডি বিন্যাসের সাথে তারিখগুলি জিজ্ঞাসা করছে।

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

select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');

0

এটা ব্যবহার কর

select * from TableName where DateTimeField > date() and  DateTimeField < date() + 1


-1
select * from invoice where TRANS_DATE_D>= to_date  ('20170831115959','YYYYMMDDHH24MISS')
and TRANS_DATE_D<= to_date  ('20171031115959','YYYYMMDDHH24MISS');

আমি মনে করি এটি ওরাকল সিনট্যাক্স, এসকিউএল সার্ভারে কাজ করবেন না
ceinmart

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