Datetime display using month name in T-SQL - sql-server

There is a field which is date type in a table. The format of this field is mm/dd/yy. Is there any way to convert it to dd-Month name-yy?
Best Regards,

Without any hassle, you can use CONVERT to get "dd MONTHNAME yyyy" format:
SELECT CONVERT(VARCHAR, GETDATE(), 106)
e.g. "25 Jan 2010"
If you want your exact format, you may need a bit of manual fiddling around like:
SELECT CAST(DAY(GETDATE()) AS VARCHAR) + '-' + LEFT(DATENAME(mm, GETDATE()), 3) + '-' + RIGHT(CAST(YEAR(GETDATE()) AS VARCHAR), 2)
e.g. "25-Jan-10"
Update:
In fact, a shorter way to achieving this is:
SELECT REPLACE(CONVERT(VARCHAR, GETDATE(), 6), ' ', '-')
e.g. "25-Jan-10"

Take a look at the CAST and CONVERT functions:
http://msdn.microsoft.com/en-us/library/ms187928.aspx

example:
select convert( char(8), getdate(), 5 )
output:
dd-mm-yy
Source: compuspec date format conversion

you can try convert() ?

Maybe you need to differentiate between storing datetime values in SQL Server and displaying them. Here is a great article that explains what's going on behind the scenes: The ultimate guide to the datetime datatypes

Related

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!

Out of range when converting data SQL Server

I have a varchar column with string like date dd.mm.yyyy and I need it to convert to same string only with different format like yyyy.mm.ddT00:00:000
SOLVED: 1st Test:
SELECT REPLACE(CONVERT(varchar, CAST(table.DATE AS datetime), 126),'-','.') AS date
FROM tabletest.DBO.TABLE
Result:
I get 5 values (from more than 1000) and msg:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
SOLVED: 2nd Test:
SELECT REPLACE(CONVERT(varchar, (RIGHT(GREMPG1.DAT,4)+SUBSTRING(GREMPG1.DAT,3,4)+LEFT(GREMPG1.DAT, 2) + ), 126),'-','.') AS Datums
FROM tabletest.DBO.GREMPG1
Cannot find solution on how to get second part to this.
Maybe there is some shortest way yo convert columns record format?
Thanks.
Edited:
For second query:
Old value: 01.03.2014
New value: 2014.03.01
Need to get: 2014.03.01T00:00:00
For your first test try this way -
SELECT REPLACE(CONVERT(varchar, CONVERT(datetime,table.DATE,103), 126),'-','.') AS date FROM tabletest.DBO.TABLE
For your 2nd try -
SELECT REPLACE(CONVERT(varchar, CAST((RIGHT(GREMPG1.DAT,4)+SUBSTRING(GREMPG1.DAT,3,4)+LEFT(GREMPG1.DAT, 2)) AS DATETIME), 126),'-','.') AS Datums FROM tabletest.DBO.GREMPG1
Use this:
SELECT REPLACE(CONVERT(varchar, CONVERT(datetime,'15.02.2012',104), 126),'-','.') AS date
You get confision with the date when you cast. 15.02.2012 is calculated as mm.dd.yyyy and because there is not month 15 you get error.
So you query will look like:
SELECT
REPLACE(CONVERT(varchar, CONVERT(datetime,table.DATE,104), 126),'-','.') AS date
FROM
tabletest.DBO.TABLE;
Your SELECT seems to work. Try this:
declare #d VARCHAR(100)='13.12.2015';
SELECT REPLACE(CONVERT(varchar, CAST(#d AS datetime), 126),'-','.') AS date
/*
Result: 2015.12.13T00:00:00
*/
If it does NOT work, I'd assume a culture issue (date formats are handled quite differently according to your system's language and country).
If it works, I'd assume at least one value in your db being bad...

I want Date Like 21-Sep-12 in Sql

I have searched but i havent get the format like 21-Sep-12 date format in sql.I get every other format but i didnt get this type of Format.so,How can i get the format like this in Date?
You should rather do teh formatting on the UI/Report side.
Why do you need in in this format?
But if you must, try
SELECT REPLACE(CONVERT(VARCHAR(9), GETDATE(), 6), ' ', '-') AS [DD-Mon-YY]
SQL Fiddle DEMO
Here is a nice list of formats
SELECT REPLACE(CONVERT(VARCHAR(9), GETDATE(), 6), ' ', '-') AS [DD-Mon-YY]
Declare #dt datetime=getdate()
select REPLACE(convert(varchar(20),#dt,6),' ','-')

How can I format a datetime to varchar with the format dd-MMM-yyyy?

I feel this should be a simple solution but I'm having trouble finding anything on it...
So: How do I get from a datetime to a varchar with the format dd-MMM-yyyy?
Eg: my_date --> '29-May-2012'
The closes I've managed to come is
convert(varchar(20),my_date,105) --> '29-05-2012'
Yes, I DO need to do this right in T-SQL.
This format isn't natively supported, but from Build a cheat sheet for SQL Server date and time formats, the closest is probably:
SELECT REPLACE(CONVERT(CHAR(11), GETDATE(), 106), ' ', '-');
A previous version of this answer recommended FORMAT(), but I have since experimented and believe that's a bad idea at scale unless you just want all your queries to take twice as long.
You could use:
SELECT replace(convert(char(11), getdate(), 113), ' ', '-')
or
SELECT replace(convert(char(11), getdate(), 106), ' ', '-')

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')

Resources