Select I.Fee
From Item I
WHERE GETDATE() - I.DateCreated < 365 days
मैं दो दिन कैसे घटा सकता हूं? परिणाम दिन होना चाहिए। पूर्व: 365 दिन। 500 दिनों .. आदि ...एसक्यूएल में दो तिथियां घटाएं और परिणाम के दिन प्राप्त करें
Select I.Fee
From Item I
WHERE GETDATE() - I.DateCreated < 365 days
मैं दो दिन कैसे घटा सकता हूं? परिणाम दिन होना चाहिए। पूर्व: 365 दिन। 500 दिनों .. आदि ...एसक्यूएल में दो तिथियां घटाएं और परिणाम के दिन प्राप्त करें
उपयोग DATEDIFF
Select I.Fee
From Item I
WHERE DATEDIFF(day, GETDATE(), I.DateCreated) < 365
उपयोग DATE_DIFF
Select I.Fee
From Item I
WHERE DATEDIFF(day, GETDATE(), I.DateCreated) < 365
संपादित करें: ऐसा लगता है मैं प्रदर्शन के बारे में गलत था कोड उदाहरण पर। सबसे अच्छा कलाकार जो भी पोस्ट स्नैपेट पोस्ट किए गए मामले में दूसरे स्थान पर चलता है। यह दर्शाता है कि मैं क्या समझाने की कोशिश कर रहा था, और समय मतभेद के रूप में नाटकीय नहीं हैं:
----------------------------------
-- Monitor time differences
----------------------------------
CREATE CLUSTERED INDEX dtIDX ON #ArbDates (MyDate)
DECLARE @Stopwatch DATETIME
SET @Stopwatch = GETDATE()
-- SARGABLE
SELECT *
FROM #ArbDates
WHERE MyDate > DATEADD(DAY, -364, '2010-01-01')
PRINT DATEDIFF(MS, @Stopwatch, GETDATE())
SET @Stopwatch = GETDATE()
-- NOT SARGABLE
SELECT *
FROM #ArbDates
WHERE DATEDIFF(DAY, MyDate, '2010-01-01') < 365
PRINT DATEDIFF(MS, @Stopwatch, GETDATE())
देर पोस्टिंग और मेरे कुदरती तौर से टिप्पणी की, उदाहरण के लिए मुझे माफ करना, लेकिन मुझे लगता है कि यह महत्वपूर्ण SARG उल्लेख करने के लिए।
SELECT I.Fee
FROM Item I
WHERE I.DateCreated > DATEADD(DAY, -364, GETDATE())
हालांकि नीचे कोड में अस्थायी तालिका कोई सूचक है, प्रदर्शन अभी भी तथ्य यह है कि एक तुलना एक अभिव्यक्ति है और तालिका में एक मूल्य है और एक अभिव्यक्ति है कि में मूल्य को संशोधित करता है के बीच किया जाता है से बढ़ जाती है टेबल और एक स्थिर। उम्मीद है कि यह उपयोगी पाया जा सकता है।
USE tempdb
GO
IF OBJECT_ID('tempdb.dbo.#ArbDates') IS NOT NULL DROP TABLE #ArbDates
DECLARE @Stopwatch DATETIME
----------------------------------
-- Build test data: 100000 rows
----------------------------------
;WITH Base10 (n) AS
(
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 1
)
,Base100000 (n) AS
(
SELECT 1
FROM Base10 T1, Base10 T3, Base10 T4, Base10 T5, Base10 T6
)
SELECT MyDate = CAST(RAND(CHECKSUM(NEWID()))*3653.0+36524.0 AS DATETIME)
INTO #ArbDates
FROM Base100000
----------------------------------
-- Monitor time differences
----------------------------------
SET @Stopwatch = GETDATE()
-- NOT SARGABLE
SELECT *
FROM #ArbDates
WHERE DATEDIFF(DAY, MyDate, '2010-01-01') < 365
PRINT DATEDIFF(MS, @Stopwatch, GETDATE())
SET @Stopwatch = GETDATE()
-- SARGABLE
SELECT *
FROM #ArbDates
WHERE MyDate > DATEADD(DAY, -364, '2010-01-01')
PRINT DATEDIFF(MS, @Stopwatch, GETDATE())
में दूसरे तर्क के रूप में 'GetDate' को जानकारी के लिए धन्यवाद! –
SELECT (to_date('02-JAN-2013') - to_date('02-JAN-2012')) days_between
FROM dual
/
कैसे के बारे में
Select I.Fee
From Item I
WHERE (days(GETDATE()) - days(I.DateCreated) < 365)
SELECT DATEDIFF(day,'2014-06-05','2014-08-05') AS DiffDate
diffdate स्तंभ नाम है।
परिणाम:
DiffDate
एक ऐसा उत्तर क्यों जोड़ रहा है जो पोस्ट में अन्य उत्तरों में कोई जानकारी नहीं जोड़ता है? –
यह उत्तर नहीं है, यह मौजूदा asnwers के लिए कुछ जोड़/व्याख्या/सही आदि नहीं है –
DateDiff देखभाल के साथ संभाला जाना चाहिए। यदि आपको घंटों की परवाह है, तो यह आपको असफल कर देगा। डेटडिफ के अनुसार 11 पीएम से 1AM "1 दिन" है। यदि आप दिनों को "24 घंटे की अवधि" के रूप में देखते हैं तो इसका उपयोग न करें। – Pxtl
@Pxtl एसक्यूएल में एक समारोह है जो समय को भी मानता है? –
मुझे नहीं पता कि। – Pxtl