Convert a SQL Server datetime to a shorter date format - sql-server

I have a datetime column in SQL Server that gives me data like this 10/27/2010 12:57:49 pm and I want to query this column but just have SQL Server return the day month and year - eg. 2010 10 27 or something like that.
What are the functions I should be researching?
Should I be trying to convert to another date data type? Or simply convert it to a string?

Have a look at CONVERT. The 3rd parameter is the date time style you want to convert to.
e.g.
SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

Try this:
print cast(getdate() as date )

If you need the result in a date format you can use:
Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

In addition to CAST and CONVERT, if you are using Sql Server 2008, you can convert to a date type (or use that type to start with), and then optionally convert again to a varchar:
declare #myDate date
set #myDate = getdate()
print cast(#myDate as varchar(10))
output:
2012-01-17

If you have a datetime field that gives the results like this 2018-03-30 08:43:28.177
Proposed: and you want to change the datetime to date to appear like 2018-03-30
cast(YourDateField as Date)

With SQL Server 2005, I would use this:
select replace(convert(char(10),getdate(),102),'.',' ')
Results: 2015 03 05

The shortest date format of mm/dd/yy can be obtained with:
Select Convert(varchar(8),getdate(),1)

Just add date keyword.
E.g. select date(orderdate),count(1) from orders where orderdate > '2014-10-01' group by date(orderdate);
orderdate is in date time.
This query will show the orders for that date rather than datetime.
Date keyword applied on a datetime column will change it to short date.

For any versions of SQL Server: dateadd(dd, datediff(dd, 0, getdate()), 0)

The original DateTime field : [_Date_Time]
The converted to Shortdate : 'Short_Date'
CONVERT(date, [_Date_Time]) AS 'Short_Date'

Related

How to find difference in days from DD-MM-YYYY formatted dates in SQL Server?

I want to find the difference between two dates in DD-MM-YYYY format. For example, I have 2 dates 29-10-2018 and 29-11-2018. I want to find the difference in number of days between those two dates (30 days) in SQL Server.
You can change the date format of current session and then use DateDiff function.
SET DATEFORMAT 'dmy'
SELECT DATEDIFF(DAY, '29-10-2018', '29-11-2018')
I will check more about Set DateFormat before adding this to Production code.
That changes the SESSION date format, not the DATABASE.
[Note from Previous Post: This is often not the way to solve the problem of interpreting dates. Datetimes should not be stored a strings if you can avoid it (use a datetime or date column instead). If you have to store in a string form, use an ISO 8601 format which is basically of the form YYYYMMDD]
Use DATEDIFF
SELECT DATEDIFF(day, '2018-10-29 00:00:00.000', '2010-11-29 00:00:00.000')
declare #date1 varchar(10),#date2 varchar(10)
set #date1 = '01-11-2018'
set #date2 = '28-11-2018'
select
datefromparts(
right(left(#date2 ,10),4),
substring(left(#date2 ,10),4,2),
left(left(#date2 ,10),2)
)
select
DATEDIFF
(
DAY,
datefromparts( right(left(#date1 ,10),4),
substring(left(#date1 ,10),4,2),
left(left(#date1 ,10),2)
),
datefromparts( right(left(#date2 ,10),4),
substring(left(#date2 ,10),4,2),
left(left(#date2 ,10),2)
)
)

Convert DDMMYYYY to YYYYMMDD date format in sql server?

I have a date in table as "26052016" in format DDMMYYYY
I want to convert this date to "YYYYMMDD" format.
Any idea
I have tried this method
select CONVERT(varchar(8),[doc-date],112) FROM C034_PDK_ParallelBillingSourceExtract
But this is gives me the same date as a result.
Please help me
I can find this way, i don't know if any other way exist or not..
declare #date nvarchar(max)='01052016'
select convert(varchar(8),cast(CONCAT(SUBSTRING(#date,3,2),'/',SUBSTRING(#date,1,2),'/',SUBSTRING(#date,5,4)) as date),112)as [YYYYMMDD]
Clear Code:
declare #date nvarchar(max)='01052016'
declare #date1 date
set #date1 =cast(CONCAT(SUBSTRING(#date,3,2),'/',SUBSTRING(#date,1,2),'/',SUBSTRING(#date,5,4)) as date)
select convert(varchar(8),#date1,112)as [YYYYMMDD]
If you are using Sql version< 2012 then you need to skip CONCAT and use + for string concatination.
SELECT CONVERT(VARCHAR(8), doc-date, 112) AS [YYYYMMDD] from
C034_PDK_ParallelBillingSourceExtract
Check ... this should work correctly.
Thanks
SELECT CONVERT(VARCHAR(8), '26052016', 112) AS [YYYYMMDD] from
C034_PDK_ParallelBillingSourceExtract
Try like this,
SELECT substring([doc-date], 5, 4) + substring([doc-date], 3, 2) + substring([doc-date], 1, 2) AS [YYYYMMDD]
FROM C034_PDK_ParallelBillingSourceExtract
There are differet ways to do it.
The best way is to use substring method as you know the character positions are going to remain same.
For Example
Suppose your date is - 31122015
Pick the portions of date using substring method and concatenate them
select SUBSTRING('31122015',5,4) + SUBSTRING('31122015',3,2) + SUBSTRING('31122015',1,2)
The result would be - 20153112
Since SQL Server 2016 we have a couple of handy tools for this:
Use DATEFROMPARTS and SUBSTRING to convert odd date formats from any arrangement within a Varchar to an actual date:
SELECT DATEFROMPARTS(SUBSTRING('31122015',5,4), SUBSTRING('31122015',3,2), SUBSTRING('31122015',1,2))
Use FORMAT to Convert an actual date to YYYYMMDD:
SELECT FORMAT(MyDate, 'yyyyMMdd')
watch out for the yyyyMMdd, that's the only part of MS SQL that is case-sensitive. Lower case mm is "minutes" and upper case MM is "Month", upper case YYYY or DD is nothing, and will just add letters to your output!

SQL - Convert varchar (dd/mm/yyyy hh.mm AM/PM) to datetime

I'm trying to convert a varchar field to datetime. The data in the varchar field looks like this dd/mm/yyyy hh.mm AM/PM.
I'm actually trying to extract the date part & time part and convert them to date and time respectively.
And I use the below query to extract the date part from the varchar and convert it to date.
SELECT DISTINCT LEFT([Start Date], 10)
,CASE WHEN ISDATE(LEFT([Start Date], 10)) = 1
THEN CONVERT(DATETIME, LEFT([Start Date], 10), 120)
END
,ISDATE(LEFT([Start Date], 10))
FROM [dbo].[TestTable]
I have timestamp in the format mentioned above for entire August.
But the query gives me the result in yyyy-dd-mm format and the date are converted to date format only till 12 Aug'15. Date after 12 of Aug is null. I know it's because, in the case statement they are returned 0. How can I convert those values also to date?
Any suggestions to convert all the values to yyyy-mm-dd hh:mm:ss will be very helpful.
Thanks in advance.
You could use SET DATEFORMAT as lad2025 suggested.
SET DATEFORMAT dmy
Or you can use the following in your CONVERT()
DECLARE #date VARCHAR(16) = '13/08/2015 11:13';
SELECT CONVERT(DATETIME, #date, 103)
103 is the code for dd/mm/yyyy.

Remove time from DateTime sql server 2005

I need date part from datetime. in format of "dd-mm-yyyy"
I have tried follwoing
Query:
select Convert(varchar(11), getdate(),101)
Output:
01/11/2011
Query
SELECT cast(floor(cast(GETDATE() as float)) as datetime)
Output
2011-01-11 00:00:00.000
Query:
SELECT
CONVERT(VARCHAR(MAX),DATENAME(DD,GETDATE())) + '-' +
CONVERT(VARCHAR(MAX),DATEPART(MONTH,GETDATE())) + '-' +
CONVERT(VARCHAR(MAX),DATENAME(YYYY,GETDATE())) `
Output:
11-1-2011 i.e. "d-m-yyyy"
I required output in "dd-mm-yyyy" format.
SELECT CONVERT(VARCHAR(10),GETDATE(),105)
Try:
SELECT convert(varchar, getdate(), 105)
More here.
Here you can find some examples how to do this: http://blog.pengoworks.com/index.cfm/2009/1/9/Useful-tips-and-tricks-for-dealing-with-datetime-in-SQL
Using the CONVERT function "works" but only if you're comparing strings with strings. To compare dates effectively, you really need to keep the SMALLDATETIME data type strongly typed on both side of the equation (ie "="). Therefore 'apros' comment above is really the best answer here because the blog mentioned has the right formulas to use to strip off the time component by "flattening" it to midnight (ie 12:00:00) via rounding and any date column in SQL Server 2005 will always default to 12:00:00 if the date is given without a time.
This worked for me ...
select dateadd(day, datediff(day, '20000101', #date), '20000101')

SQL Server 2008 script - how to to acquire current date from system and store it into a date column

Hey fellas, I'm having difficulty obtaining only the date from the system and inserting it into a column, is there a built-in function that can acquire it?
On top of that, how do I add years to the current date?
I know I'm pushing it right now, but I'm also wondering what's the format for the date datatype?
Because sometimes I'd like to manually insert values into a column with that type in mind.
Any help would greatly be appreciated.
Thanks.
To get date only (SQL Server 2008 only) CAST to date type
SELECT CAST(GETDATE() AS date)
To add years, use DATEADD
SELECT DATEADD(year, 2, CAST(GETDATE() AS date))
Formats: use yyyymmdd or ISO yyyy-mm-dd (for newer datetime types) for safety.
Read this for everything about date+time in SQL Server
To add a year to the current date, look at the dateadd() function.
To just get the date from sql w/o the time, you can do this:
DECLARE #Date DATETIME
SELECT #Date = CONVERT(VARCHAR, GETDATE(), 101)
SELECT #Date
Sql will implicity convert the VARCHAR back to DATETIME. Look up the CONVERT function in BOL and it will give you all kinds of different styles for the 3rd parameter.
Bender

Resources