2011-06-08 17 views
13

मैं तालिका Log से सभी रिकॉर्ड्स का चयन करना चाहता हूं, जहां DateAndTime फ़ील्ड मान (datetime टाइप करें) आज के दिन पहले, जो भी दिन है, के लिए हैं।टीएसक्यूएल पिछली तारीख के रिकॉर्ड

तो अगर आज 2011-06-08 है, तो मैं उन सभी पंक्तियों का चयन करना चाहता हूं जहां DateAndTime2011-06-07 00:00:00 से अधिक या बराबर है और 2011-06-08 00:00:00 से भी कम है।

मुझे लगता है कि यहां संभावित पतन का अनुमान है कि यह महीने के पहले दिन पर व्यवहार होगा, क्योंकि 2011-06-00 जैसी तारीख अमान्य है, और 2011-05-31 होना चाहिए।

उत्तर

22

एसक्यूएल सर्वर 2008 आप इस का उपयोग कर सकते मान लिया जाये।

select * 
from [log] 
where cast(DateAndTime as date) = cast(getdate()-1 as date) 

पूर्व 2008 आप इस

select * 
from [log] 
where DateAndTime >= dateadd(d, datediff(d, 0, getdate())-1, 0) and 
     DateAndTime < dateadd(d, datediff(d, 0, getdate()), 0) 

डीबीए पर संबंधित का उपयोग कर सकते हैं: Cast to date is sargable but is it a good idea?

+1

कॉलम को कास्ट करने से गंभीर प्रदर्शन प्रभाव हो सकते हैं, –

+0

@AdriaanDavel से नीचे JanW का समाधान देखें, यह कार्डिनिटी अनुमान के साथ हो सकता है। वर्गीकरण के साथ नहीं। क्या आपने मेरे उत्तर से जुड़े डीबीए पर सवाल पढ़ा था? –

3
SELECT * FROM Log 
WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE)) 
AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME) 
1

इस उदाहरण में कल्पना एसक्यूएल सर्वर:

select * 
from log 
where convert(varchar(8), DateAndTime , 112) = convert(varchar(8), getdate()-1, 112) 

अनिवार्य रूप से, (112 पैरामीटर) YYYYMMDD और उसके बाद जाँच यह कल की तारीख (getdate()-1) के बराबर है करने के लिए तिथि परिवर्तित, यह भी YYYYMMDD में बदला।

0

एसक्यूएल सर्वर

declare @today date 
set @today = GETDATE() 

select * from Log where DateAndTime between DATEADD(dd, -1, @today) and @today 
0

यह सशर्त ऑपरेटर और के बीच नहीं शामिल होना चाहिए। अन्यथा इसमें आज के रिकॉर्ड भी शामिल हैं।

Declare @today date 
Set @today = GETDATE() 


Select YourcolumnNames from log 
Where DateAndTime >= DATEADD(dd, -1, @today) and DateAndTime < DATEADD(dd, -1, @today) 

इसके अलावा, आपको कॉलम नाम का उल्लेख करना चाहिए और * चयन कथन में टालना चाहिए। यह प्रदर्शन

संबंधित मुद्दे