it-swarm.dev

كيف يمكنني اختيار اليوم الأول من الشهر في SQL؟

أحتاج فقط إلى تحديد اليوم الأول من شهر متغير وقت معين.

أعلم أنه من السهل جدًا استخدام هذا الرمز:

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

لكن هذا ليس أنيقًا جدًا ، وربما ليس سريعًا أيضًا.

هل هناك طريقة أفضل للقيام بذلك؟ أنا أستخدم SQL Server 2008.

259
Brann
SELECT DATEADD(month, DATEDIFF(month, 0, @mydate), 0) AS StartOfMonth
514
LukeH

بالإضافة إلى الإجابة أعلاه ، طريقة تعتمد على دالة مقدمة في sql 2012

SELECT DATEFROMPARTS(YEAR(@mydate),MONTH(@mydate),1)
110
Jithin Shaji

مزود خدمة 2008:

SELECT DATEADD(DAY,1,EOMONTH(@mydate,-1))
32
Marcos Krucken

من المؤكد أن قراءة سلسلة (بمعنى "5/1/2009") إلى وقت ما أصبحت أكثر وضوحًا ، لكن وجدنا رمزًا يعود لفترة من الزمن سيعود في أول الشهر ...

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

استعلام بسيط:

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

ربما هو سريع جدا. لماذا لا تنشئها كدالة SQL.

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
5
dove

هذا يعمل أيضا:

    SELECT DATEADD(DAY,(DATEPART(DAY,@mydate)-1)*(-1),@mydate) AS FirstOfMonth
4
Alan Burstein
SELECT @myDate - DAY(@myDate) + 1
2
PoloSoares

يرجى استخدام هذا

  1. لخادم 2012

    DATEFROMPARTS(year('2015-06-30'),month('2015-06-30'),1)
    
  2. قبل خادم 2012

    select  cast(cast(year('2015-06-30') as varchar(4))+'-'+ cast(month('2015-06-30') as varchar(2))+'-01' as smalldatetime)
    
2
adnan umar
----Last Day of Previous Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
LastDay_PreviousMonth
----Last Day of Current Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth
----Last Day of Next Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))
LastDay_NextMonth
2
kaub0st3r
DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(Getdate(),-2))

سوف تحصل على -2 في اليوم الأول من الشهر الماضي. أي ، getdate () هو 10/15/18. نتائجك ستكون 9/1/18. التغيير إلى -1 وستكون نتائجك 10/1/18. 0 سيكون بداية الشهر المقبل ، 11/1/2018 .. إلخ.

أو

DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(@mydate,-1))
1
Brian Widdoes

جوغل المستقبل ، على MySQL ، جرب هذا:

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

إذا كنت تنظر إلى هذا اليوم ، وباستخدام SQL Server 2012 أو الأحدث ، لديك وظيفة EOMONTH التي تجعل الأمور أسهل:

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

يمكنك تغيير GETDATE () مع أي متغير تاريخ تريده.

1
Ang Li

إذا كنت تستخدم SQL Server 2012 أو أعلى ؛

SELECT DATEADD(MONTH, -1, DATEADD(DAY, 1, EOMONTH(GETDATE())))
1
Lankymart

حاول تنفيذ الاستعلام التالي:

SELECT DATE_ADD(DATE_ADD(LAST_DAY(CURRENT_DATE-INTERVAL 1 DAY),INTERVAL 1 DAY),INTERVAL -1 MONTH)

1
divya

هنا يمكننا استخدام الاستعلام أدناه إلى التاريخ الأول من الشهر والتاريخ الأخير من الشهر.

SELECT DATEADD(DAY,1,EOMONTH(Getdate(),-1)) as 'FD',Cast(Getdate()-1 as Date)
as 'LD'
1
Pradeep Thakur

أوصيت شخصيًا بأن sql أدناه لأنه عندما أحاول استخدام دالة التاريخ في جملة الشرط ، فإن إبطاء سرعة استعلامي كبير جدًا.

على أي حال لا تتردد في محاولة هذا.

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

لقد استخدمت GETDATE () كتاريخ للعمل به ، يمكنك استبداله بالتاريخ الذي تريده.
إليك الطريقة التي يعمل بها: أولاً ، نقوم بتنسيق التاريخ بتنسيق YYYMMDD ... باقتطاع للاحتفاظ بـ 6 أحرف في أقصى اليسار فقط للحفاظ على جزء YYYYMM فقط ، ثم إلحاق "01" بالشهر - و voila ! لديك اليوم الأول من الشهر الحالي.

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

راجع للشغل ، أداء رائع في هذا!

0
Eli

حدد CONVERT (التاريخ ، DATEADD (dd ، - (DATEPART (dd ، getdate ()) - 1) ، getdate ()) ، 120)

ستوفر لك هذه الوظيفة جزءًا من تاريخ بدء الشهر

0
Tushar

في Sql Server 2012 ،

 select getdate()-DATEPART(day, getdate())+1

 select DATEADD(Month,1,getdate())-DATEPART(day, getdate())
0
BornToCode

عدم التنافس مع أي من العقول العظيمة هنا ، ولكن اقتراح بسيط مختلف قليلاً عن الإجابة المقبولة أعلاه.

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

اليوم الأول والأخير من الشهر الحالي:

select dateadd(mm, -1,dateadd(dd, +1, eomonth(getdate()))) as FirstDay, 
eomonth(getdate()) as LastDay
0
nicolai koroslev

أحب استخدام FORMAT ، يمكنك حتى تحديد وقت

SELECT FORMAT(@myDate,'yyyy-MM-01 06:00') first_of_a_month
0
michal
SELECT DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())

.................................................. ...................

إذا كنت لا تريد الوقت ، فقم بتحويله إلى DATE أو إذا كنت ترغب في تخصيص الوقت إلى 0:00:00 ، قم بالتحويل إلى DATE ثم إلى DATETIME.

SELECT CONVERT (DATETIME,  
CONVERT (DATE, DATEADD (DAY, -1 * (DAY(GETDATE()) - 1),
GETDATE())))

تغيير GETDATE () إلى التاريخ الذي تريده

0
Sayka