मैं एक तालिका से पिछले दिन की सभी पंक्तियों का चयन करने के लिए एक अच्छे एसक्यूएल स्टेटमेंट की तलाश कर रहा हूं। तालिका में एक डेटाइम कॉलम होता है। मैं SQL Server 2005 का उपयोग कर रहा हूं।
मैं एक तालिका से पिछले दिन की सभी पंक्तियों का चयन करने के लिए एक अच्छे एसक्यूएल स्टेटमेंट की तलाश कर रहा हूं। तालिका में एक डेटाइम कॉलम होता है। मैं SQL Server 2005 का उपयोग कर रहा हूं।
जवाबों:
आज बिना समय गवाएं:
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)
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)हूँ तो मुझे मिलता है:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
SQL में "आज" मान प्राप्त करने के लिए:
convert(date, GETDATE())
"कल" पाने के लिए:
DATEADD(day, -1, convert(date, GETDATE()))
"आज माइनस एक्स दिन" प्राप्त करने के लिए: -1 में -X बदलें।
तो सभी कल की पंक्तियों के लिए, आपको मिलता है:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
ऐसा लगता है कि स्पष्ट उत्तर गायब था। तालिका (Ttable) से सभी डेटा प्राप्त करने के लिए जहां स्तंभ (DatetimeColumn) टाइमस्टैम्प के साथ एक डेटाटाइम है, निम्नलिखित क्वेरी का उपयोग किया जा सकता है:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
इसे आसानी से आज, पिछले महीने, पिछले साल, आदि में बदला जा सकता है।
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)क्योंकि इसे प्रत्येक पंक्ति पर
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
इसका वास्तव में एक पुराना धागा है, लेकिन यहाँ मेरा इस पर ध्यान है। 2 अलग-अलग खंडों के बजाय, एक से अधिक और उससे कम। मैं ए डेट से रिकॉर्ड चुनने के लिए इसे नीचे सिंटैक्स का उपयोग करता हूं। यदि आप एक तिथि सीमा चाहते हैं तो पिछले उत्तर जाने का तरीका है।
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
उपरोक्त मामले में कल के रिकॉर्ड के लिए X -1 होगा
यह करना चाहिए:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
SQL सर्वर में ऐसा करते हैं:
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)
इसे "कल" बताने का एक और तरीका ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
यह अवधारणा 1 जनवरी को, साथ ही साथ हर महीने के पहले दिन अच्छी तरह से काम नहीं करेगी। लेकिन मक्खी पर यह प्रभावी है।
खैर, डेटाइम कॉलम को डेट और तुलना की तुलना में आसान बनाना है।
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
SELECT *वसीयत किसी भी तारीख को उनके मूल समय के साथ वापस कर देगी।