DATE from DATETIME in SQL SERVER 2005 (Without using VARCHAR) - sql

Our application using SQL SERVER 2005
I need to show only DATE from DateTime in GridView.
I don't want to convert it into any other format like Varchar or something.
It should be only in DateTime format itself, without Time.
Please Help.

In SQL Server, the code is
CAST(datediff(d,0,datetimecol) as datetime)
However, I doubt that does any good for a GridView, which will infer it to be a "datetime" column and show a "date + time" formatting, even if the times are ALL "00:00:00".

Bound the DateField coloumn in Grid like below, then it works...
<asp:BoundField DataField="Your_Date_Column"
HeaderText="Date_Column"
DataFormatString="{0:d}" />
DataFormatString="{0:d}" it display the Date like 3/11/2013

In SQL 2005 there is no way of keeping it in datetime format without the time (time is part of the datetime type), the best you could get would be something like:
2013-04-02 00:00:00.000
If you were willing to convert to VARCHAR, you could use something similar to:
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
Which would display the date portion as you want it. Otherwise, you need to move to SQL 2008+ where there is a proper date type that you can use instead.
If you need to stick with SQL 2005, the best way to achive this is to just format it in the datagrid view itself.

If you want to truncate a datetime so that it only returns the date as at midnight, see the accepted answer to this question - the question relates specifically to SQLServer 2008, but the answer includes details of how to achieve this in SQLServer 2005.
If you want to convert a datetime field into a date-only field - you cannot achieve this in SQLServer 2005 in SQL alone, as there is no date-only datatype - see here.

Related

Change Datetime format in Microsoft Sql Server 2012

Hi i want to change the default datetime type in sql server. I have already table who has rows and i dont want to delete them. Now the datetime format that had rows is: 2015-11-16 09:04:06.000 and i want to change in 16.11.2015 09:04:06 and every new row that i insert i want to take this datetime format.
SQL Server does not store DATETIME values in the way you're thinking it does. The value that you see is simply what the DBMS is choosing to render the data as. If you wish to change the display of the DATETIME type, you can use the FORMAT() built-in function in SQL Server 2012 or later versions, but keep in mind this is converting it to a VARCHAR
You can get the format you desire via the following:
SELECT FORMAT(YourDateField, N'dd.MM.yyyy HH:mm:ss')
There is no such thing as format of the DATETIME data type, it has no format by nature, formatted is the text representation you can set when converting to VARCHAR or some visualization settings of the client / IDE.
If you, however, want to be able to insert dates using string representations that are alternatively formatted (i.e. control the way string input is parsed to datetime type) you can check SET DATEFORMAT - as explained in the remarks section this will not change the display representation of date fields / variables.
SQL serve provide wide range of date formatting function or way by using that user can change date format as per his requirement.
Some of are giver bellow.
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),10)
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),6)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

How do you convert SQL mm/dd/yy to mm/dd only?

How do you convert SQL mm/dd/yy datetime to mm/dd only? On Microsoft server.
Thanks all.
With dates and times it is an extremely common mistake to believe that what you see is what is stored. If the field is date, datetime, smalldatetime or datetime2 then what is stored are integers, not strings. So if the field is one of these, then:
convert(varchar(5),[date_field],1)
or
format([date_field],'MM/dd') -- mssql 2012 onward
If the information is a string already then left() will do the job.
Since you have specified an input format, the input must already be a string. Simply truncate with
cast(dateIn as char(5)).
You can use LEFT to just return the day and month:
SELECT LEFT('12/12/2000', 5)
I realize this isn't directly answering your question the way you asked it, but the best advice I can give is: Don't.
Instead, send back the field in its native datetime type. The database is not the place to be doing formatting. Instead, format the date in your application code.
For example, if you are calling SQL Server from a C#/.NET application, you could retrieve the value from a DataReader like this:
DateTime dt = (DateTime) reader["YourDateTime"];
Then you would format it as a string like this:
string s = dt.ToString("MM/dd");
This will ensure that the date is formatted correctly. If you are using a different language to call SQL Server, there are probably similar methods in that language.
One of the problems with the other approach mentioned (trunacating the string) is that the original value might not be formatted in mm/dd/yyyy to begin with. That all depends on the environment settings where the SQL Server is running. If you run the same code on an environment with dd/mm/yyyy settings, you would have unexpected results. This is avoided by using the native data type, the way I described.

Selecting date from Datetime field access

It may seems like stupid question but I cannot find any solution for it
I have column with StartDateTime dd.mm.yyyy hh.mm.ss
I need to select only dd.mm.yyyy because its access SQL Server CAST doesn't work. Is there any function in MS Access which I can use for selecting only dd.mm.yyyy?
It's been a while, but would the DateValue function work?

SQL Server: How to specify particular default date format with getdate()?

I have SQL Server 2008 R2 and one of my tables has a date field. When an insert from my ASP.NET page happens, the date is automatically inserted by setting the default field value to getdate(). However, this adds the date in the format YYYY-MM-DD HH:MM:SS.0000000. I really only need the time up to seconds and not the trailing zeros after it.
How can I do this?
A DateTime, whether in SQL Server or .NET code does not have a format. It has an internal representation.
When you want to display the value of the DateTime you format it using a format string.
select (convert(char(19), getdate(), 121))
Gives:
2012-04-06 10:16:50
Up to SQL Server 2008 R2, all you can do is convert the datetime (stored as 8 bytes) you're getting back using a list of possible, supported formats - see the MSDN documentation on CAST and CONVERT for the complete list of supported formats.
With SQL Server 2012, you'll be able to use a FORMAT function much like in .NET - but again, that's a new function in the 2012 version, not available in earlier versions.

SQL: how to check for a specific DateTime

i need to check for a specific DateTime value in my table from my code (VB.NET) and i don't know how to format the DateTime as a string. i've read that SQL Server will recognize my string if it's in either date, time, or date and time format. i mean:
'May 15, 2004'
'5/15/2004'
'20040515'
'2004 4 am'
will SQL Server recognize these strings as valid DateTime values? i'm curious because if i check the actual DateTime values in the table they are in this format:
2/2/2006 3:49:33 PM
Don't put the date/time value in the SQL query in the first place - use a parameterized query and then you don't need to know or care what format SQL Server would parse literals as. You put the placeholder in the SQL, and specify the value as a DateTime in the parameter collection.
You should be using parameterized SQL as a matter of course, in fact - not only does it get rid of formatting and parsing problems like this, but possibly more importantly it's the single most effective weapon against SQL injection attacks.
If not using a parameterized query, use CAST/CONVERT to explicitly change a string to a DATETIME:
SELECT CAST('2/2/2006 3:49:33 PM' AS DATETIME)
On my SQL Server 2005, that returns to me:
2006-02-02 15:49:33.000
Mind that the default date format in SQL Server can be different than what you provide.
This has always been safe that I have found:
YYYY-MM-DD HH:MI:SS
If you're comparing DateTime to DateTime, you don't have to worry about conversion, necessarilly, but yes, Sql Server (at least as of 2k8, and I believe 2k5 as well) will automatically parse a DateTime from a string. That is, if you pass '5/15/2004' it will see 5/15/2004 12:00:00 AM or something similar.
a better way, though, is to use SqlParameters in your SqlCommand from Code.