convert this back to a date?

I want this result to be converted to a date.  The point of the below code was to return only month and year but now i want that to be recognized as a date .

SELECT CONVERT(VARCHAR, MONTH(getdate())-1, 120) + '/' + CONVERT(VARCHAR, YEAR(getdate())-1, 120)  

SO I was hoping to do something like this but i got an error

SELECT CONVERT(datetime, CONVERT(VARCHAR, MONTH(getdate()), 120) + '/' + CONVERT(VARCHAR, YEAR(getdate()), 120)  , 104)
vbnetcoderAsked:
Who is Participating?
 
Jim HornMicrosoft SQL Server Developer, Architect, and AuthorCommented:
Ok.  

If all you're going to do is display the mm/yy value and never touch it, then varchar is fine.

If this column will be touch in ways such as passed parameters or column sorting where you expect the sort order to behave like a date, then another option is to pass BOTH the mm/yy varchar and datetime value, show the mm/yy column but hide the datetime column, and add logic to your report that when you sort the mm/yy column it actually sorts the set based on the datetime column.
1
 
Pawan KumarDatabase ExpertCommented:
Try this


SELECT DATEFROMPARTS(YEAR(GETDATE()) , MONTH(getdate()) , '01' )
0
 
Pawan KumarDatabase ExpertCommented:
Or this what ever you need ...

SELECT DATEFROMPARTS(YEAR(GETDATE()) , MONTH(getdate()) , DAY(GETDATE()) )

Open in new window

0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
Pawan KumarDatabase ExpertCommented:
In this you easily do the maths also e.g. month - 1 etc.
0
 
Jim HornMicrosoft SQL Server Developer, Architect, and AuthorCommented:
>return only month and year
>but now i want that to be recognized as a date
The above two comments are mutually exclusive, as formatting a datetime into anything that only shows part of the whole value will convert it to a character value.

Would probably help to give is a 'before and after' data mockup of what you're trying to do here, and your overall requirements as we may be able to recommend a better workaround.
0
 
Pawan KumarDatabase ExpertCommented:
If you need mm/dd/yyyy format use below

--

SELECT CONVERT(VARCHAR(10), DATEFROMPARTS(YEAR(GETDATE()) , MONTH(getdate()) , DAY(GETDATE())) ,101)

--

Open in new window

0
 
Scott PletcherSenior DBACommented:
Don't convert to char at all, that just adds complexity and slows things down:

SELECT DATEADD(YEAR, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0))

The "standard best-practice" way to adjust the current date to a given time period is:

DATEADD(<time_period>, DATEDIFF(<time_period>, 0, GETDATE()), 0)

That code very flexibly and  efficiently "zeros out" the time and puts you to the start of the specified time period.  Some specific examples:

SELECT
    DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0),
    DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0),
    DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)

The code above simply adapts the MONTH adjustment to backup one month and then to subtract one year from that.
0
 
vbnetcoderAuthor Commented:
Jim - you answered my question. I figured that was the case but wasn't sure. I have a report were i am only interested in month/year so i was hoping there was something to make it be recognized as a year.
0
 
Scott PletcherSenior DBACommented:
Do any/all conversions from date/datetime to character formats in the last query to process/present the data, since character format is less efficient for SQL to use.
1
 
Scott PletcherSenior DBACommented:
I object to Khowal's claimed solution because "DATEFROMPARTS" is not available in SQL 2008, as specified in the initial q.
0
 
Scott PletcherSenior DBACommented:
I object to Khowal's claimed solution because "DATEFROMPARTS" is not available in SQL 2008, as specified in the initial q.
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.