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

mlcktmguy
mlcktmguy used Ask the Experts™
on
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)?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Analyst Assistant
Commented:
You could use FORMAT.

FORMAT(PaymentDate, 'MMMM yyyy')
Manoj SinghSoftware Engineer

Commented:
Have you tried above
PortletPaulEE Topic Advisor
Most Valuable Expert 2014
Awarded 2013
Commented:
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

Ensure you’re charging the right price for your IT

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden using our free interactive tool and use it to determine the right price for your IT services. Start calculating Now!

Mark WillsTopic Advisor, Page Editor
Distinguished Expert 2018
Commented:
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

Mark WillsTopic Advisor, Page Editor
Distinguished Expert 2018
Commented:
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

Author

Commented:
Thanks you all, great information
Excellent answer Norie.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial