Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

convert this back to a date?

Posted on 2016-09-16
13
Medium Priority
?
69 Views
Last Modified: 2016-09-30
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)
0
Comment
Question by:vbnetcoder
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
  • 2
  • +1
13 Comments
 
LVL 30

Expert Comment

by:Pawan Kumar
ID: 41801793
Try this


SELECT DATEFROMPARTS(YEAR(GETDATE()) , MONTH(getdate()) , '01' )
0
 
LVL 30

Expert Comment

by:Pawan Kumar
ID: 41801797
Or this what ever you need ...

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

Open in new window

0
 
LVL 30

Expert Comment

by:Pawan Kumar
ID: 41801798
In this you easily do the maths also e.g. month - 1 etc.
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 
LVL 66

Expert Comment

by:Jim Horn
ID: 41801816
>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
 
LVL 30

Expert Comment

by:Pawan Kumar
ID: 41801822
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
 
LVL 70

Expert Comment

by:Scott Pletcher
ID: 41801840
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
 

Author Comment

by:vbnetcoder
ID: 41801844
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
 
LVL 66

Accepted Solution

by:
Jim Horn earned 2000 total points
ID: 41801870
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
 
LVL 70

Expert Comment

by:Scott Pletcher
ID: 41801917
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
 
LVL 70

Expert Comment

by:Scott Pletcher
ID: 41823879
I object to Khowal's claimed solution because "DATEFROMPARTS" is not available in SQL 2008, as specified in the initial q.
0
 
LVL 70

Expert Comment

by:Scott Pletcher
ID: 41823881
I object to Khowal's claimed solution because "DATEFROMPARTS" is not available in SQL 2008, as specified in the initial q.
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A Stored Procedure in Microsoft SQL Server is a powerful feature that it can be used to execute the Data Manipulation Language (DML) or Data Definition Language (DDL). Depending on business requirements, a single Stored Procedure can return differe…
When trying to connect from SSMS v17.x to a SQL Server Integration Services 2016 instance or previous version, you get the error “Connecting to the Integration Services service on the computer failed with the following error: 'The specified service …
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how to use the INSERT statement to insert data into their tables. It will also introduce the NULL statement, to show them what happens when no value is giving for any given column.

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question