मैं SQL में एक महीने के पहले दिन का चयन कैसे कर सकता हूं?




sql-server tsql (13)

CONVERT का चयन करें (दिनांक, DATEADD (डीडी, - (DATEPART (डीडी, getdate ()) - 1), getdate ()), 120)

यह फ़ंक्शन आपको महीने की आरंभ तिथि का दिनांक हिस्सा प्रदान करेगा

मुझे बस दिए गए डेटाटाइम चर के महीने के पहले दिन का चयन करने की आवश्यकता है।

मुझे पता है कि इस तरह के कोड का उपयोग करना काफी आसान है:

select CAST(CAST(YEAR(@mydate) AS VARCHAR(4)) 
+ '/' + CAST(MONTH(@mydate) AS VARCHAR(2)) + '/01' AS DATETIME)

लेकिन यह बहुत ही सुरुचिपूर्ण नहीं है, और शायद बहुत तेज़ नहीं है।

क्या ऐसा करने के लिए इससे अच्छा तरीका है ? (मैं एसक्यूएल सर्वर 2008 का उपयोग कर रहा हूँ)


MySQL पर भविष्य googlers, इसे आजमाएं:

select date_sub(ref_date, interval day(ref_date)-1 day) as day1;

एक स्ट्रिंग का कास्टिंग (यानी "5/1/2009") डेटाटाइम के लिए निश्चित रूप से अधिक सुगम है लेकिन हमें थोड़ी देर पहले कोड मिला जो महीने के पहले में वापस आ जाएगा ...

DECLARE @Date DATETIME
//...
SELECT DATEADD(mm, DATEDIFF(mm,0,@Date), 0)

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

SELECT DATEADD(DAY,1,EOMONTH(@mydate,-1))

मैंने GETDATE () को काम करने की तारीख के रूप में उपयोग किया, आप इसे जिस तारीख की आवश्यकता है उसे बदल सकते हैं।
यहां बताया गया है कि यह कैसे काम करता है: सबसे पहले हम YYYYMMDD में दिनांक को प्रारूपित करते हैं ... केवल YYYYMM भाग को रखने के लिए केवल 6 बाएं कोने रखने के लिए प्रारूप छंटनी करते हैं, और फिर महीने के रूप में '01' जोड़ते हैं - और voila! आपके पास वर्तमान माह का पहला दिन है।

SELECT CAST(CONVERT(VARCHAR(6),GETDATE(),112) +'01' AS DATETIME) AS StartOfMonth

बीटीडब्ल्यू, इस पर प्रदर्शन बहुत अच्छा है!


मैंने व्यक्तिगत रूप से अनुशंसा की है कि नीचे एसक्यूएल क्योंकि जब मैं शर्त खंड में दिनांक फ़ंक्शन का उपयोग करने का प्रयास करता हूं, तो यह मेरी क्वेरी गति को धीमा कर देता है।

वैसे भी इस कोशिश करने के लिए स्वतंत्र महसूस करें।

select CONCAT(DATEPART(YYYY,@mydate),'-',DATEPART(MM,@mydate),'-01')

यदि आप आज इसे देख रहे हैं, और SQL सर्वर 2012 या नए का उपयोग करते हुए आपके पास EOMONTH फ़ंक्शन है जो चीजों को आसान बनाता है:

SELECT DATEADD(day, 1, EOMONTH(DATEADD(month, -1, GETDATE()))) as firstdateofmonth

आप जो भी डेट वैरिएबल चाहते हैं उसके साथ आप GETDATE () को बदल सकते हैं।


यह बेवकूफ लगता है, लेकिन मेरे लिए काम करता है:

  select DATE_FORMAT(NOW(), '%Y-%m-1')

यह शायद काफी तेज है। इसे एसक्यूएल फ़ंक्शन के रूप में क्यों न बनाएं।

CREATE FUNCTION [dbo].[GetFirstDayOfMonth] ( @InputDate    DATETIME )
RETURNS DATETIME
BEGIN

    RETURN CAST(CAST(YEAR(@InputDate) AS VARCHAR(4)) + '/' + 
                CAST(MONTH(@InputDate) AS VARCHAR(2)) + '/01' AS DATETIME)

END
GO

यहां किसी भी महान दिमाग से प्रतिस्पर्धा नहीं करना है, लेकिन एक सरल सुझाव थोड़ा अलग है कि ऊपर दिए गए स्वीकृत उत्तर।

select dateadd(day, -(datepart(day,@date)+1,@date)

सरल प्रश्न:

SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0) 
-- Instead of GetDate you can put any date.

SELECT @myDate - DAY(@myDate) + 1

SELECT DATEADD(month, DATEDIFF(month, 0, @mydate), 0) AS StartOfMonth






datetime