Date Functions, How to convert 'datetime' field to text decription('December 2012') in SQl Server Developer 14?

I've looked thru the 'Date and Time Functions' in SSMS under the 'Functions'/System Functions but I don't have any documentation.

I am pulling data from a file that I want to sort and group on the Year and Month of the Payment Date.  The payment date is defined at 'datetime'.  Payments from the same year and month should be grouped and summarized into a 'Collection Period' line on the report.

I was able to used the Year function to extract the 4 digit year (for example:(2002)  and I was able to use the 'Month' function to pull the month (6) but I can't make the leap to what the user wants.  On the generated report the user wants to see the 'Collection Period' in text (December 2012, November 2012 etc..).  They also want the collection period sorted in ascending order.  December 2012 will be followed by January 2013 etc..

Any payments for dates 12/1/12 thru 12/31/12 would be grouped, summarized and show on the report as December 2012.

 Any November payment dates dates would be shown as November 2012 etc..

Is there any way within SQL to convert from the original 'PaymentDate', datetime field (12/2/12, 12/3/12, 12/15/12, 12/22/12) to the corresponding text description (December 2012)?
LVL 1
mlcktmguyAsked:
Who is Participating?
 
NorieConnect With a Mentor VBA ExpertCommented:
You could use FORMAT.

FORMAT(PaymentDate, 'MMMM yyyy')
1
 
Manoj SinghSoftware EngineerCommented:
Have you tried above
0
 
PortletPaulConnect With a Mentor freelancerCommented:
T-SQL documentation  used to be called "Books On Line" (BOL)

As mentioned above from SQL Sever 2012 the easiest way is to use the FORMAT() function

If you are on SQL 2008 you can use DATENAME()
e.g.
select
       format(getdate(),'MMMM yy')
     , datename(mm,getdate()) + ' ' + right(datename(yy,getdate()),2)

Open in new window

0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
Mark WillsConnect With a Mentor Topic AdvisorCommented:
Concur with FORMAT

Actually wrote an Article on it : https://www.experts-exchange.com/articles/20059/T-SQL-formatting-Dates-and-Times-using-FORMAT.html

But you have a number of options :

select format(getdate(),'MMMM yyyy')

select datename(month,getdate()) + ' ' + datename(year,getdate())

-- or a calendar table (where a lot of places build their own)

Select mname+' '+yname from MyCalendar where cdate = cast(getdate() as date) 

-- BUT
-- for reporting, you need to use components separately because FORMAT essentially becomes string - nvarchar

select format(reporting_period,'MMMM yyyy') as RP
from ( select getdate() as Reporting_Period 
       union all 
       select getdate() - 33 ) as report_data
order by year(reporting_period),month(reporting_period)

Open in new window

0
 
Mark WillsConnect With a Mentor Topic AdvisorCommented:
Oh, and that Calendar Table, Jim Horn wrote an Article about building and using : https://www.experts-exchange.com/articles/12267/SQL-Server-Calendar-Table.html
0
 
mlcktmguyAuthor Commented:
Thanks you all, great information
0
 
Ramesh D JaiswalCommented:
Excellent answer Norie.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.