এসকিউএল সার্ভার 2005-এ একটি তারিখের সময় থেকে মাস এবং বছর পান


87

'জানুয়ারী 2008' এর মতো এসকিউএল সার্ভারে ডেটটাইম থেকে আমার মাস + বছর দরকার। আমি মাস, বছর দ্বারা ক্যোয়ারী গ্রুপ করছি। আমি ডেট পার্ট, রূপান্তর ইত্যাদির মতো ফাংশন সন্ধান করেছি এবং খুঁজে পেয়েছি তবে এর মধ্যে কোনওটিই এর জন্য কার্যকর বলে মনে হচ্ছে না। আমি কি এখানে কিছু মিস করছি? এর জন্য কোন অনুষ্ঠান আছে?


@ ইভান ক্যারল - এই প্রশ্নটি ছিনতাই করে? যদি আপনার প্রশ্নের উচ্চতর উত্তর থাকে, তবে এটি কি লোকদের একটি আলাদা প্রশ্নের দিকে নির্দেশ করার পরিবর্তে প্রশ্নের উত্তর হিসাবে সরবরাহ করা উচিত নয়?
এসটিএলডিভ

@ এসটিএল ডেভেলপার এটি কীভাবে হাইজ্যাক করছে। প্রশ্ন 2005 জন্য কল? আমি সেখানে রাখিনি। আমি 2005-এর সন্ধান করছি না ... দুর্ভাগ্যক্রমে, এখানে সেরা উত্তর 2005-এ কাজ করে না, এটি 2012-স্পষ্ট। প্রত্নতাত্ত্বিক হওয়ার জন্য আমার কি 2005 সালের উত্তরগুলিকে ডাউন করা উচিত?
ইভান ক্যারল

@ এসটিএল ডেভেলপার আসলে, আমি এখানে যত্ন করি না। =) আমার অফিসিয়াল অবস্থান সবসময়ই পোস্টগ্র্রেএসকিউএল ব্যবহার করার জন্য লোকদের পরামর্শ দেওয়া ছিল, কেন আমি সহায়তা করার চেষ্টা করছি তা নিশ্চিত নয়।
ইভান ক্যারল 0

এটি আমার কাছে কেবল অদ্ভুত বলে মনে হয়েছিল যে আপনি পণ্যের বিভিন্ন সংস্করণের জন্য প্রশ্নের নতুন সংস্করণ তৈরি করতে ফিরে গিয়েছিলেন এবং তারপরে সেই প্রশ্নের উত্তর দিতে পারেন, যা আমার ধারণা ভাল।
এসটিএলডিভ

উত্তর:


75

যদি আপনি বোঝাতে চান যে সেগুলি ফর্ম্যাটে স্ট্রিং হিসাবে ফিরে চান;

SELECT 
  CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) 
FROM customers

এখানে অন্যান্য ফর্ম্যাট অপশন রয়েছে


আমি আমার এসকিউএল সার্ভারে কনভার্ট (চার (4), গেটডেট (), 100) ব্যবহার করার চেষ্টা করেছি এবং এর পরিবর্তে আমি "09 1" পেয়েছি। আমি স্থান এবং একটি "1" 17. ব্যবহার "নির্বাচন করুন রূপান্তর করুন (varchar, GetDate (), 100)" ফলন "09 17 2009 4:59 PM তে" পেয়েছিলাম
তন্দ্রা

4
এটি অদ্ভুত - আমি যে ডक्सটির সাথে লিঙ্ক করেছি, তার মধ্যে 100 কে তিন অক্ষরের মাসের সংক্ষিপ্ত বিবরণ এবং একটি স্পেস ফিরিয়ে আনা উচিত, যদি CHAR (4) এ চুক করা হয়। তবে তারপরে, আপনি যে ফলাফলটি কোন কনভার্টের জন্য পোস্ট করেছেন (বার্চার, গেটডেট (), 100) আমি যা দেখতে প্রত্যাশা করব তার থেকে আলাদা দেখাচ্ছে। আপনি এসকিউএল সার্ভারের কোন সংস্করণ ব্যবহার করছেন? আপনি কোন স্থানীয়করণ / আন্তর্জাতিকীকরণ সেটিংস ব্যবহার করছেন (এটি 100 ফরম্যাটের সাথে বিবেচিত হওয়া উচিত নয়)।
রোবসফট

171
select 
datepart(month,getdate()) -- integer (1,2,3...)
,datepart(year,getdate()) -- integer
,datename(month,getdate()) -- string ('September',...)

সুতরাং, আমি মনে করি এই হল আমি কি চাই, কিন্তু আমি দেখতে পাচ্ছি না কিভাবে TSQL মধ্যে পার্থক্য বুঝতে হবে datepart(month,getdate())এবং datepart(year,getdate())। কি কি মাস এবং বছর ?
jp2code

4
@ jp2code মাস এবং বছর মূলত এখানে সংজ্ঞায়িত ধ্রুবক করা হয়: msdn.microsoft.com/en-us/library/ms174420.aspx । টিএসকিউএল তাদের পড়ার মাধ্যমে আপনার মতো করে বোঝে :)
জাচারি ইয়েটস

4
LOL - ধন্যবাদ Zach। আমি এটি একটি ভিন্ন সাইটে এটি সন্ধানের আগে অনেক আগে অভিনয় করেছিলেন।
jp2code

ফাংশন রূপান্তর চেয়ে অনেক ক্লিনার। #cleanCode
RBT

52

এসকিউএল সার্ভার ২০১২ দিয়ে শুরু করে আপনি এটি ব্যবহার করতে পারেন:

SELECT FORMAT(@date, 'yyyyMM')

4
ভাল অভিনয় করেছেন স্যার ... এটি 2012 সালে আমার প্রশ্নের উত্তর দিয়েছে
স্কোয়া 1rr3lz

আমি খুশি যে আমি এ পর্যন্ত স্ক্রোল করেছি, এটি পরিষ্কার এবং সহজ। ধন্যবাদ!
নিক্লাস

এটি একটি মূল্যবান অবদান তবে এটি অন্যত্র উত্তর দেওয়া উচিত ছিল, stackoverflow.com/a/43196370/124486
ইভান ক্যারল

12

ব্যবহার:

select datepart(mm,getdate())  --to get month value
select datename(mm,getdate())  --to get name of month

11

মজার বিষয় হচ্ছে, আমি এসকিউএল সার্ভার এবং তারপরে লিনকিউতে এই একই ক্যোয়ারীটি লিখতেছিলাম।

SELECT 
    DATENAME(mm, article.Created) AS Month, 
    DATENAME(yyyy, article.Created) AS Year, 
    COUNT(*) AS Total 
FROM Articles AS article 
GROUP BY 
    DATENAME(mm, article.Created), 
    DATENAME(yyyy, article.Created) 
ORDER BY Month, Year DESC

এটি নিম্নলিখিত আউটপুট (উদাহরণ) উত্পাদন করে।

Month | Year | Total

January | 2009 | 2

9

এসকিউএল সার্ভারে 2012, নীচে ব্যবহার করা যেতে পারে

ফর্ম্যাট (গেটেটেট (), 'এমএমএম ইয়ে') নির্বাচন করুন

এটি সঠিক "জুন 2016" দেয়




5

এই ফর্ম্যাটটির অস্তিত্ব নেই। আপনাকে দুটি জিনিসের সংমিশ্রণ করতে হবে,

select convert(varchar(4),getdate(),100)  + convert(varchar(4),year(getdate()))

4

এটি করার সর্বোত্তম উপায়টি হ'ল:

dateadd(month,datediff(month,0,*your_date*),0)

এটি আপনার ডেটটাইমের ধরণ রাখবে


4
দিন এবং সময়ের উপাদানগুলি উপেক্ষা করে কোনও তারিখকে কেবল মাস এবং বছর হতে বাধ্য করার পক্ষে এটি এখন পর্যন্ত সেরা উত্তর। গৃহীত উত্তরের চেয়ে অনেক ভাল কারণ তথ্যটি সঠিকভাবে সাজানো যেতে পারে এবং ডাউন স্ট্রিম রিপোর্টিং সরঞ্জামগুলিতে একটি তারিখ হিসাবে সঠিকভাবে কাজ করে।
জেমি থমাস

আমি আন্তরিকভাবে সম্মতি জানাই যে এটি মাসের শুরুর সবচেয়ে ভাল উপায়। এটি ডেটা টাইপের ডেটটাইম রাখে এবং রেন্ডারিংটিকে সামনের প্রান্তে ছেড়ে দেয়, যেখানে এটি হওয়া উচিত। ক্ষেত্রের মাসের মধ্যে গ্রুপ সারিগুলির মতো কাজ করার এটি সঠিক উপায়।
জেফ ব্রেডনার

2

পুরো মাসের নাম দেয়, -, পুরো বছর যেমন March-2017

CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate()))

4
ইতিমধ্যে এই প্রশ্নের আরও 18 টি উত্তর রয়েছে। আপনার উত্তরটি নতুন কোন তথ্য যুক্ত করে?
stannius

1

আমারও একই সমস্যা ছিল এবং চারপাশ দেখার পরে আমি এটি দেখতে পেলাম:

SELECT DATENAME(yyyy, date) AS year
FROM Income
GROUP BY DATENAME(yyyy, date)

এটি দুর্দান্ত কাজ করছে!


1

মাসের প্রথমটিতে তারিখটি রূপান্তরকরণ আপনাকে একক বৈশিষ্ট্য দ্বারা গ্রুপ বাই এবং অর্ডার করার অনুমতি দেয় এবং এটি আমার অভিজ্ঞতার চেয়ে দ্রুত।

declare @mytable table(mydate datetime)
declare @date datetime
set @date = '19000101'
while @date < getdate() begin
    insert into @mytable values(@date)
    set @date = dateadd(day,1,@date)
end

select count(*) total_records from @mytable

select dateadd(month,datediff(month,0,mydate),0) first_of_the_month, count(*) cnt
from @mytable
group by dateadd(month,datediff(month,0,mydate),0)

1
---Lalmuni Demos---
create table Users
(
userid int,date_of_birth date
)
---insert values---
insert into Users values(4,'9/10/1991')

select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, 
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, 
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users


1

প্রশ্নটি এসকিউএল সার্ভার 2005 সম্পর্কে, এখানে অনেক উত্তর পরবর্তী সংস্করণ এসকিউএল সার্ভারের জন্য।

select convert (varchar(7), getdate(),20)
--Typical output 2015-04

এসকিউএল সার্ভার ২০০-এ তারিখের কার্যকারিতা নেই যা এসকিউএল সার্ভার ২০০৮ সালে প্রবর্তিত হয়েছিল



0
  ,datename(month,(od.SHIP_DATE)) as MONTH_

উত্তর: MONTH_ জানুয়ারী জানুয়ারী সেপ্টেম্বর অক্টোবর ডিসেম্বর সেপ্টেম্বর


0

এটা দুর্দান্ত কাজ।

DECLARE @pYear VARCHAR(4)

DECLARE @pMonth VARCHAR(2)

DECLARE @pDay VARCHAR(2)

SET @pYear  = RIGHT(CONVERT(CHAR(10), GETDATE(), 101), 4)

SET @pMonth = LEFT(CONVERT(CHAR(10), GETDATE(), 101), 2)

SET @pDay   = SUBSTRING(CONVERT(CHAR(10), GETDATE(), 101), 4,2)

SELECT @pYear,@pMonth,@pDay

-3

নিম্নলিখিত নিখুঁতভাবে কাজ করে! আমি কেবল এটি ব্যবহার করেছি, চেষ্টা করে দেখুন।

date_format(date,'%Y-%c')

4
এটি কোনও বৈধ
স্কেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.