আমি কীভাবে এসকিউএল এ মাসের প্রথম দিনটি নির্বাচন করতে পারি?


308

আমার কেবলমাত্র প্রদত্ত তারিখের পরিবর্তনশীল মাসের প্রথম দিনটি নির্বাচন করা দরকার।

আমি জানি যে এই ধরণের কোড ব্যবহার করে করা বেশ সহজ:

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

তবে এটি খুব মার্জিত নয় এবং সম্ভবত খুব দ্রুতও নয়।

এই কাজ করতে একটি ভাল উপায় আছে কি? আমি এসকিউএল সার্ভার 2008 ব্যবহার করছি।

উত্তর:


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


63
এটি লক্ষ করা উচিত যে মার্টিন স্মিথের দ্বারা উল্লিখিত বাগটি পারফরম্যান্সকে "কেবল" প্রভাবিত করতে পারে, সঠিকতা নয়।
ওলসন.দেব


34
যদি কেউ ভাবছেন যে SELECT EOMONTH(@mydate) AS EndOfMonthআপনাকে মাসের শেষ দিনটি দেবে।
হলিঝ

3
উল্লেখিত কার্ডিনালিটির অনুমানের বাগটি আমাকে প্রভাবিত করবে কিনা তা আমি কীভাবে নির্ধারণ করতে পারি? এটি ২০১০ সালে ঠিক করা হিসাবে চিহ্নিত করা হয়েছে। এর অর্থ কি কেবল এসকিউএল সার্ভার ২০১২ এবং আরও নতুন নিরাপদ, বা এটি সম্ভব যে ২০০৮ এর একটি সার্ভার প্যাচ হয়ে থাকতে পারে?
জন

134

উপরের সমস্ত উত্তর ছাড়াও, একটি ফাংশন ভিত্তিক একটি উপায় চালু করা হয়েছে sql 2012

SELECT DATEFROMPARTS(YEAR(@mydate),MONTH(@mydate),1)

62

এসকিউএল সার্ভার 2012 দিয়ে শুরু:

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

11
এটি কেবলমাত্র 2012 এবং পরে কাজ করবে বলে মনে হচ্ছে। এমএসডিএন.মাইক্রোসফট.এইনস
জোশ ইয়েগার

1
এটি কেবলমাত্র একবার উত্স তারিখ উল্লেখ করেছে যে সুবিধা আছে, তাই যদি এটি একটি ফাংশন কল থেকে উদ্ভূত হয় তাই আরও নিকটতর।
আয়ান হরভিল

2
আমি অবাক হয়েছি কেন তারা সোমোনথ যোগ করেনি :)
আবু-এমিশ ১৩

14

ডেটটাইমে একটি স্ট্রিং (যেমন "5/1/2009") ingালাই অবশ্যই আরও সুগঠিত তবে আমরা কিছুক্ষণ আগে কোড পেয়েছি যা মাসের প্রথম দিকে ফিরে আসবে ...

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


6

এটি সম্ভবত বেশ দ্রুত। কেন এটি একটি স্কয়ার ফাংশন হিসাবে তৈরি করবেন না।

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


3

এটি ব্যবহার করুন

  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
SELECT @myDate - DAY(@myDate) + 1

সত্যিই সহজ এবং মার্জিত সমাধান তবে মনে রাখবেন যে ভেরিয়েবলটিতে নির্দিষ্ট করে থাকলে এটিও তারিখের সময় অংশটি দেয়।
kuklei

আমি এই কাজ করতে পারে না। অতিরিক্ত ক্লোজিং বন্ধনী পাশাপাশি আমি এই ত্রুটি পাবেন: Operand type clash: date is incompatible with int। আমার ধারণা এটি কারণ আপনি -একটি তারিখে অপারেটরটি ব্যবহার করার চেষ্টা করছেন ?
স্যাম

পারফরম্যান্সের ক্ষেত্রে এটি কতটা ভাল তা আমি জানি না তবে এটি অবশ্যই কাজটি করে।
সালকন

@ স্যাম, আপনার সংঘাত হয়েছে কারণ সাধারণ গাণিতিক (+, -) তারিখের সময় নয় তারিখের সময়গুলিতে কাজ করে।
ডারলভ

2
----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

তবে ওপি মাসের প্রথম দিনটির সন্ধান করছে। শেষ দিনের জন্য, আপনি কেবল EOMONTH () ব্যবহার করতে পারবেন - 2012 সালের পর থেকে এইভাবে চলেছে
ডয়চচুইড

2

এটি একটি নতুন ফাংশন হতে পারে তবে আপনি পুরানো ফাংশনগুলিও ব্যবহার করতে পারেন:

select DATEFROMPARTS(year(@mydate),month(@mydate),'01')

ভেরিয়েবলের তারিখটি উদাহরণ হিসাবে থাকলে '2017-10-29' এটি একটি তারিখ ফেরত দেয়'2017-10-01'

https://docs.microsoft.com/en-us/sql/t-sql/functions/datefromparts-transact-sql?view=sql-server-ver15


1

ভবিষ্যতের গুগলরা, মাইএসকিউএল এ চেষ্টা করুন:

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

3
এটি একটি sql-serverপ্রশ্ন, date_subএবং intervalহয় mysql
ওঝাজা

ভাল, পয়েন্ট, আমি প্রতিক্রিয়া সম্পাদনা করেছি। আমি মনে করি এটি এখনও থ্রেডের জন্য প্রাসঙ্গিক।
এরিয়েল টি

1

আমি GETDATE () এর সাথে কাজ করার জন্য একটি তারিখ হিসাবে ব্যবহার করেছি, আপনি এটি আপনার প্রয়োজনীয় তারিখের সাথে প্রতিস্থাপন করতে পারেন।
এটি কীভাবে কাজ করে তা এখানে: প্রথমে আমরা YYYYMMDD এ তারিখটি ফর্ম্যাট করি ... কেবল YYYYMM অংশটি রাখার জন্য 6 টি বাম দিকের অক্ষর রাখার জন্য বিন্যাসটি কেটে ফর্ম্যাট করে এবং তারপরে '01' মাস হিসাবে যুক্ত করুন - এবং ভয়েলা! আপনার চলতি মাসের প্রথম দিন আছে।

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

বিটিডব্লিউ, অভিনয় এতে দুর্দান্ত!


1

আপনি যদি আজ এটির দিকে নজর দিচ্ছেন এবং এসকিউএল সার্ভার 2012 ব্যবহার করছেন বা আরও নতুন আপনার কাছে EOMONTH ফাংশন রয়েছে যা জিনিসগুলিকে সহজ করে তোলে:

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

আপনি চান তারিখের পরিবর্তনশীল সহ আপনি GETDATE () পরিবর্তন করতে পারেন।


1

এখানে আমরা মাসের প্রথম তারিখ এবং মাসের শেষ তারিখের নিচে কোয়েরিটি ব্যবহার করতে পারি।

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

1

যদি এসকিউএল সার্ভার 2012 বা ততোধিক ব্যবহার করা হয়;

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

1
DECLARE @startofmonth date
SET @startofmonth = DATEADD(dd,1,EOMONTH(Getdate(),-2))

-২ আপনাকে গত মাসের প্রথম দিনটি পেয়ে যাবে। অর্থাত্, getdate () 10/15/18। আপনার ফলাফল 9/1/18 হবে। -1 এ পরিবর্তন করুন এবং আপনার ফলাফলগুলি 10/1/18 হবে। 0 আগামী মাসে, 11/1/2018 .. ইত্যাদি শুরু হবে etc.

অথবা

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

1

নিম্নলিখিত কোয়েরি কার্যকর করার চেষ্টা করুন:

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


0

কনভার্ট নির্বাচন করুন (তারিখ, তারিখ (ডিডি, - (তারিখ পার্ট (ডিডি, গেটডেট ()) - 1), গেটেট ()), 120)

এই ফাংশনটি আপনাকে মাসের শুরু তারিখের তারিখের অংশ সরবরাহ করবে


0
SELECT DATEADD (DAY, -1 * (DAY(GETDATE()) - 1), GETDATE())

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

আপনি যদি সময়টি চান না, তবে এটিকে DATE এ রূপান্তর করুন বা সময় সময়টি 0:00:00 এ রূপান্তর করুন, তারিখে রূপান্তর করুন এবং তারপরে DATETIME এ ফিরে আসুন।

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

আপনি যে তারিখে চান তা GETDATE () পরিবর্তন করুন


0

আমি ব্যক্তিগতভাবে নীচের স্কেলটি সুপারিশ করলাম কারণ যখন আমি শর্তের ধারাটিতে তারিখ ফাংশনটি ব্যবহার করার চেষ্টা করি তখন এটি আমার ক্যোয়ারির গতি খুব কম করে দেয়।

যাইহোক এটি চেষ্টা করতে নির্দ্বিধায়।

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

0

এখানে দুর্দান্ত মনের কারও সাথে প্রতিযোগিতা করার জন্য নয়, তবে একটি সহজ পরামর্শটি কিছুটা আলাদা যা উপরে গৃহীত উত্তর।

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

0

আমি ব্যবহার করতে চাই FORMAT, আপনি এমনকি একটি সময় নির্দিষ্ট করতে পারেন

SELECT FORMAT(@myDate,'yyyy-MM-01 06:00') first_of_a_month

0

SQL সার্ভারে 2012,

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

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

0

এই কোয়েরিটি মাইএসকিউএলে খুব ভাল কাজ করা উচিত:

SELECT concat(left(curdate(),7),'-01') 

0

যে কোনও উত্তর এখনও খুঁজছেন তাদের জন্য, এটি একটি কবজির মতো কাজ করে এবং কোনও ডেট-অ্যাডসকে বাদ দেয়। টাইমস্ট্যাম্পটি isচ্ছিক, যদি এটি নির্দিষ্টকরণের প্রয়োজন হয় তবে এটি ছাড়াও কাজ করে।

SELECT left(convert(varchar, getdate(),23),7)+'-01 00:00:00'

0

এসকিউএলে প্যারামিটার হিসাবে আমরা যে তারিখে পাস করি তার প্রথম তারিখ এবং শেষ তারিখ পান

     @date DATETIME
    SELECT @date = GETDATE()
    SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@date)-1),@date),105) AS value,
    'First Day of Current Month' AS name
    UNION
    SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@date))),
    DATEADD(mm,1,@date)),105),
    'Last Day of Current Month'
    GO


      **OutPut**

12/01/2019  First Day of Current Month
12/31/2019  Last Day of Current Month

-3

আপনি এটি মাইএসকিউএলে কীভাবে করবেন তা এখানে রয়েছে:

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

4
দয়া করে উল্লেখ করুন যে এটি স্কিল-সার্ভারের উত্তর নয় তবে কেবল মাইএসকিউএল এ কাজ করে।
kuklei

এসকিউএল সার্ভারের জন্য, আপনি ব্যবহার করতে পারেনSELECT FORMAT(GETDATE(), 'yyyy-MM-01')
ন্যাসের

সংখ্যাগুলিতে কিছু করা যায় এবং করা উচিত এমন কিছু করার জন্য লোকগুলিকে তারিখগুলিকে স্ট্রিংয়ে ফর্ম্যাট করতে উত্সাহিত করবেন না। এটি বলার মতো "আপনি কোনও সংখ্যাকে নিকটতম 100 এ স্ট্রিংয়ে ফর্ম্যাট করে শেষ দুটি অঙ্ক বাদ দিয়ে এটিকে দুটি বিস্তৃত করে, এবং '00'" তে যুক্ত করে বলতে পারেন
কায়ুস জার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.