পূর্ববর্তী দিন থেকে সমস্ত সারি নির্বাচন করতে এসকিউএল বিবৃতি


120

আমি একটি টেবিল থেকে আগের দিন থেকে সমস্ত সারি নির্বাচন করার জন্য একটি ভাল এসকিউএল বিবৃতি খুঁজছি। টেবিলটি একটি ডেটটাইম কলাম ধারণ করে। আমি এসকিউএল সার্ভার 2005 ব্যবহার করছি।

উত্তর:


211

আজ কোন সময় পান:

SELECT dateadd(day,datediff(day,0,GETDATE()),0)

হ্যাঁ, আজকাল দিন নেই:

SELECT dateadd(day,datediff(day,1,GETDATE()),0)

কেবলমাত্র গতকাল থেকে সমস্ত সারিটির জন্য ক্যোয়ারী:

select 
    * 
    from yourTable
    WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
        AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)

@ অ্যাশথিংকস, আপনার মন্তব্যটি আমার কাছে কোনও অর্থ দেয় না। আসল প্রশ্নটি জিজ্ঞাসা করে যে আগের দিন থেকে কীভাবে সারিগুলি পাওয়া যায়। এটি করার জন্য আপনাকে কেবল আজকের তারিখ (কোনও সময় নেই) এবং কেবল গতকের তারিখ (কোনও সময় নেই) পেতে সক্ষম হতে হবে। আপনি এই (কালজয়ী) তারিখগুলি `WHERE` ধারাটিতে ব্যবহার করেন। তবে, SELECT *তাদের আসল সময়গুলির সাথে কোনও তারিখ ফেরত দেবে।
কেএম

তারিখগুলি "ভুল পরামিতি গণনা ত্রুটি" দেয় " এবং stackoverflow.com/a/18926156/3007408 datediff শুধুমাত্র 2 প্যারামিটার ব্যবহার করতে পারেন বলেছেন। কোন সমাধান ??
Sp0T

@ Sp0T, এই প্রশ্নের ছাগু ট্যাগ করা হয় SQL সার্ভার , একটি DATEDIFF () ফাংশন যা গ্রহণ করে তিন মাপদণ্ডগুলি (যা msdn.microsoft.com/en-us/library/ms189794.aspx ) প্রশ্ন এর প্রতি সংযোগ আছে মাইএসকিউএল জন্য, যা আমি অনুমান আপনি যেমনটি পেয়েছেন ঠিক তেমনভাবে কাজ করে। আপনি দেখতে পাবেন যে এসকিউএল সম্পূর্ণরূপে বিনিময়যোগ্য নয়, বিভিন্ন বিক্রেতার মধ্যে বিশেষত তারিখ পরিচালনার বিষয়ে এর মধ্যে অনেকগুলি পার্থক্য রয়েছে।
কেএম

উহ ধন্যবাদ. সেটা জানত না। বিটিডব্লিউ আমি "কারডেট () -1 দিন এবং কারডেট () এর মধ্যে" ব্যবহার করে সমস্যার সমাধান করেছি। এটিও এই ক্ষেত্রে ব্যবহার করা যেতে পারে।
Sp0T

1
@ রসমাস বিডস্ট্রপ, হ্যাঁ যখন আমি দৌড়ান SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)আমি পাই:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
কেএম।

44

এসকিউএলে "আজ" মান পেতে:

convert(date, GETDATE())

"গতকাল" পেতে:

DATEADD(day, -1, convert(date, GETDATE()))

"আজ মাইনাস এক্স দিনগুলি" পেতে: -1--এ পরিবর্তন করুন।

সুতরাং সমস্ত গতকালের সারিগুলির জন্য, আপনি পাবেন:

select * from tablename
   where date >= DATEADD(day, -1, convert(date, GETDATE()))
   and date < convert(date, GETDATE())

"তারিখ" SQL সার্ভার 2005 সালে ডাটাটাইপ স্বল্পতা থাকবেই যখন আমি DATETIME পরিবর্তে সময় মান থাকার বিষয়টি মতেই ব্যবহার এবং হিসাব 0am থেকে 12pm না ঘটে কিন্তু সময় থেকে ক্যোয়ারী চালানোর
rudimenter

1
আমার ভুল. আমি আপনাকে এসকিউএল সার্ভার 2005 এর সাথে লেনদেন করতে দেখিনি Indeed প্রকৃতপক্ষে, আমার কোডটি কেবল এসকিউএল সার্ভার ২০০৮ এর জন্য কাজ করে।
কোনামিমান

আমি সর্বদা ভাবতাম যে তারিখের (দিন, ....) অপচয় হ'ল
কেএম।

18

দেখে মনে হচ্ছে সুস্পষ্ট উত্তরটি অনুপস্থিত ছিল। একটি সারণী (টিটবেল) থেকে সমস্ত ডেটা পেতে যেখানে কলামটি (ডেটটাইম কলাম) একটি টাইমস্ট্যাম্প সহ একটি ডেটটাইম যেখানে নিম্নলিখিত কোয়েরিটি ব্যবহার করা যেতে পারে:

SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday

এটি সহজেই আজ, গত মাসে, গত বছর, ইত্যাদিতে পরিবর্তন করা যেতে পারে


3
এটি একটি খুব সুন্দরভাবে কাজ করে তবে DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)এটি প্রতিটি সারিতে DATEDIFF () মূল্যায়ন করতে হয় বলে তুলনায় অনেক বেশি ব্যয়বহুল
ভ্যাক্লাভ হলুভা


5

এটি সত্যিই একটি পুরানো থ্রেড, তবে এটি এখানে আমার গ্রহণযোগ্য। 2 টি পৃথক ধারাগুলির চেয়ে একটি এর চেয়ে বড় এবং কম less আমি এ তারিখ থেকে রেকর্ড নির্বাচন করার জন্য নীচের সিনট্যাক্সটি ব্যবহার করি। আপনি যদি কোনও তারিখের সীমা চান তবে পূর্ববর্তী উত্তরগুলি হ'ল উপায়।

SELECT * FROM TABLE_NAME WHERE 
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0

উপরের ক্ষেত্রে এক্স গতকাল রেকর্ডের জন্য -1 হবে


4

এখনই এটি পরীক্ষা করতে পারবেন না, তবে:

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)


2

এসকিউএল সার্ভারে এটি করুন:

where cast(columnName as date) = cast(getdate() -1 as date)

সময় বিন্যাসের সমস্যাগুলি এড়াতে আপনার অভিব্যক্তিটির উভয় পক্ষের আজকের তারিখটি কাস্ট করা উচিত।

আপনার যদি আরও বিশদে ব্যবধান নিয়ন্ত্রণ করতে হয় তবে আপনার এমন কিছু চেষ্টা করা উচিত:

declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)

1

এটি "গতকাল" বলার আর একটি উপায় ...

Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))

এই ধারণাটি 1 জানুয়ারী, পাশাপাশি প্রতি মাসের প্রথম দিনেই ভাল কাজ করবে না। তবে উড়ে যাওয়ার ক্ষেত্রে এটি কার্যকর।


1

ঠিক আছে, তারিখের তারিখের সময় কলামটি কাস্ট করা সহজ এবং তুলনা করার চেয়েও সহজ।

SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = 
   dateadd(day,0, convert(date, getdate(), 105)) 

0

সাবডেট (এখন (), ১) গতকাল টাইমস্ট্যাম্প ফিরে আসবে নীচের কোডটি গতকালের টাইমস্ট্যাম্প সহ সমস্ত সারি নির্বাচন করবে

Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.