Format date as Month dd, yyyy? - sql-server

In SQL Server, I'd like to select a date from a DateTime column in Month dd, yyyy format.
I currently am using the following code:
SELECT CONVERT(VARCHAR(12), DateColumnHere, 107) 'Formatted Date'
Which returns:
Feb 15, 2013
Is there any way to get the full month name, like:
February 15, 2013
Thanks!

Here is a site with a ton of formats and little date hacks for SQL:
http://www.sql-server-helper.com/tips/date-formats.aspx
And here is their query for your format (Month dd, yyy):
SELECT DATENAME(MM, GETDATE()) + RIGHT(CONVERT(VARCHAR(12), GETDATE(), 107), 9) AS [Month DD, YYYY]

SQL Server has a limited number of date formats, but you can use the DATENAME function to concatenate the peices:
SELECT DATENAME(MM, GETDATE()) + ' ' +
DATENAME(DD, GETDATE()) + ', ' +
DATENAME(YYYY, GETDATE())
AS 'Formatted Date'
However in general it's often better practice to leave dates in date format rather than converting to strings, and only converting to strings in the display layer (Web site, report, application, wherever) where the formatting capabilities are much richer. Plus you lose the ability to do date math, sorting, etc. if you convert to string.

SELECT DATENAME(MM, GETDATE()) + RIGHT(CONVERT(VARCHAR(12), GETDATE(), 107), 9) AS [Month DD, YYYY]

Try with this:
SELECT STUFF(CONVERT(VARCHAR(12), GETDATE(), 107), 1,3,DATENAME(month,GETDATE()))

Related

How to convert mm/dd/yyyy militarytime -> mm/dd/yyyy hh:mm:ss AM/PM

I'm using the following code and almost getting what I'm looking for:
SELECT sdb.NAME AS DatabaseName
,COALESCE(CONVERT(VARCHAR(10), cast(max(bus.backup_finish_date) as date), 101) + ' ' + convert(varchar(12), max(bus.backup_finish_date), 108), 'Never Restored') as [LastBackupTime]
FROM sys.sysdatabases sdb
INNER JOIN dbo.backupset bus
ON bus.database_name = sdb.NAME
GROUP BY sdb.NAME,
bus.backup_finish_date
Your result should be something like:
mm/dd/yyyy HH:mm:ss
I'm trying to get
mm/dd/yyyy hh:mm:ss AM/PM
I've tried multiple converts, a series of casts, ltrim/right, and even offering homage to the T-SQL overlords. No luck yet.
I've even tried
SELECT sdb.NAME AS DatabaseName
--Code below needs changed to show Date & time--
,COALESCE(CONVERT(VARCHAR(30), MAX(bus.backup_finish_date), 100), 'Never
backed up.') AS LastBackUpTime
FROM sys.sysdatabases sdb
INNER JOIN dbo.backupset bus
ON bus.database_name = sdb.NAME
GROUP BY sdb.NAME,
bus.backup_finish_date
but that gets me (for example) Mar 21 2017 10:47AM. We really prefer 3/21/2017 10:47AM.
Suggestions? I'm still picking this apart but could use some help.
Thanks!
If you are using SQL Server 2012 or later, you can use FORMAT():
Select Format(Max(bus.backup_finish_date), N'MM/dd/yyyy hh:mm:ss tt')
If you are using SQL Server 2012 or later you can use FORMAT, although be wary of doing this on large data sets.
SELECT FORMAT(GETDATE(), 'MM/dd/yyyy hh:mm:sstt')
For earlier versions, or if performance is a concern, For earlier versions, or if performance is a concern, you can concatenate the date in the format MM/dd/yyyy (style 101), with the time in the format hh:mm:ss (style 8) and a case expression to determine AM or PM
SELECT CONVERT(VARCHAR(10), GETDATE(), 101) + ' '
+ CONVERT(VARCHAR(10), GETDATE(), 8)
+ CASE WHEN DATEPART(HOUR, GETDATE()) < 12 THEN 'AM' ELSE 'PM' END
HOWEVER, formatting is a job for the presentation layer. If it was me doing this, then I would just send the native datetime, including nulls back to the presentation layer and let this handle it. It means that in your application layer you can still work with the dates, perform date calculations, or sort etc without the worry that 15/01/2017 is going to appear after 02/02/2017. It also means you can display dates in the end user's preferred locale, rather than yours.
One easiest way is to use format but it is not highly performant:
select FORMAT(Max(bus.backup_finish_date),'MM/dd/yyyy hh:mm:ss tt')
For earlier versions one another naive way of doing is as below:
Select CONVERT(VARCHAR(10), getdate(), 101) + ' ' + LTRIM(RIGHT(CONVERT(CHAR(20), getdate(), 22), 11))
Instead of GetDate() use your date
But that is already mentioned by #GarethD So never mind

Get hour:minutes from DATETIME2

I have a problem in SQL Server 2008 R2. I want to get HH:mm from a DATETIME2 column. When I write this statement:
SELECT CONVERT(VARCHAR(5), getdate(), 8)
I am getting perfect result that is 11:19, but when I try to get time from:
SELECT (CONVERT(VARCHAR(5), '1900-01-01 01:10:00.0000000', 8))
I am getting result 1900 but I need 01:10.
How can I get the result from this statement? I know there there are multiple questions/answers like this but I have not found any answer that matches my question.
On SQL Server side (in stored procedure, for example), you can use this kind of conversion:
declare #dt datetime2(0) = sysdatetime();
select #dt as [Date], left(convert(time(0), #dt, 108), 5) as [HH:mm];
If you need to display your data on the client side, such as a report or your app, it's better to use client' formatting capabilities. This way, you may be able to take such factors into account as preferred calendar system, 12- or 24-hour clock, etc.
Try this:
SELECT RIGHT('0' + CONVERT(VARCHAR(2),
DATEPART(HOUR, '1900-01-01 01:10:00.0000000')), 2) hh,
DATEPART(minute, '1900-01-01 01:10:00.0000000') mm
Or
SELECT LEFT(CONVERT(TIME(0), '1900-01-01 01:10:00.0000000'), 2) hh , DATEPART(minute, '1900-01-01 01:10:00.0000000') mm
For many format of 24H datetime length is 19 so you can use the following
SELECT RIGHT('0' + CAST(DATEPART(HOUR, Substring('1900-01-01 01:10:00.0000000',1,19)) AS VARCHAR(2)), 2) + ':' + CAST(DATEPART(minute, substring('1900-01-01 01:10:00.0000000',1,19)) AS VARCHAR(2)) HHmm
Hope it helps
Try this, I think this is what you want.
this will give answer: 1:10
SELECT CONVERT(VARCHAR(5),CONVERT(DATETIME,'1900-01-01 01:10:00.000'),8)
You can also try this
select convert(VARCHAR,DATEPART(HOUR,'1900-01-01 01:10:00.0000000'))+':'+CONVERT(VARCHAR,DATEPART(MINUTE,'1900-01-01 01:10:00.0000000'))

Format date as 'DD Month YYYY'

Just have a mssql query that has a date in the format:
'2016-03-22 00:00:00.000'
I need to format it as:
'22 March 2016'
I'm using SQL Server 2012. I've tried googling and the usual 106, 112 codes don't seem to work.
Is there a specific code format I can use?
Try the FORMAT function:
SELECT FORMAT(GETDATE(), 'D', 'en-gb')
If your version does not support the FORMAT function, you can do it by concatenating the date parts:
SELECT
RIGHT('00' + CAST(DATEPART(DAY, GETDATE()) AS VARCHAR(2)), 2) + ' ' +
DATENAME(MONTH, GETDATE()) + ' ' +
CAST(DATEPART(YEAR, GETDATE()) AS VARCHAR(4))
Use Format Function in SQL Server 2012
SELECT FORMAT(GETDATE(),'dd-MMMM-yyyy')
See Image for your datatype ref
Try this query:
SELECT CONVERT(VARCHAR, CONVERT(DATETIME, '2016-03-22 00:00:00.000'), 106)
You need to convert into DATETIME then you will get your desired output
More Datetime Sql formate
SQLFiddle
This may help you
Try Convert function for SQL server:
select convert(varchar(11),cast('2016-03-22 00:00:00.000' as datetime), 106)
How to change day, month, year in PHP:
echo $purchase_date=date('F-Y',strtotime('2022-03-22 00:00:00.000'));
Answer:
March-2022

Date Format in SQL dd/mm/yyyy hr:mm:ss AM/PM

What is the format to be used in SQL to get date in format like
dd/mm/yyyy hr:mm:ss AM/PM
eg: 9/17/2013 4:55:43 PM
The link below gives an answer but i want value in seconds also
How to display Date in DD/MM/YYYY H:MM AM/PM format in SQL Server
Instead of 101 in below query.
convert(varchar, CONVERT(smalldatetime, PhaseStartDate), 101)
You can check both posts below...
They convert to mm/dd instead of dd/mm
but to get what you want, just change to 103 instead of 101 ;)
Link 1
Link 2
select convert(varchar(10), GETDATE(), 103 /*or 101*/) + ' ' +
ltrim(right(convert(varchar(20), GETDATE(), 22), 11))
Probably you meant 103 or mm/dd/yyyy instead. You could craft that yourself from the pieces or combine and craft from two or more styles.
IMHO, that should be something you do in your front end.
CONVERT(VARCHAR(10), PhaseStartDate, 101) + Substring((CONVERT(VARCHAR(20), PhaseStartDate, 22)),9,12) as PhaseStartDate
Useful Link is here
http://www.sql-server-helper.com/sql-server-2008/sql-server-2008-date-format.aspx
I assume that you're not using SQL Server 2005.
here is your query
SELECT
CONVERT(VARCHAR,GETDATE(),103) +' '+
CONVERT(VARCHAR(8),CAST( GETDATE() AS TIME ))+' '+
SUBSTRING(CONVERT(VARCHAR(30), GETDATE(), 9), 25, 2)

SQL Server Format Date DD.MM.YYYY HH:MM:SS

How can I get a date like 'dd.mm.yyyy HH:MM:SS'
I tried the following but it's not exactly what I'm looking for...
select convert(varchar(20),getdate(),113)
result: 14 Jul 2011 09:23:57
Thanks a lot
Largo
See http://msdn.microsoft.com/en-us/library/ms187928.aspx
You can concatenate it:
SELECT CONVERT(VARCHAR(10), GETDATE(), 104) + ' ' + CONVERT(VARCHAR(8), GETDATE(), 108)
A quick way to do it in sql server 2012 is as follows:
SELECT FORMAT(GETDATE() , 'dd/MM/yyyy HH:mm:ss')
You can learn datetime formatting in sql server here
http://www.sql-server-helper.com/tips/date-formats.aspx
http://yrbyogi.wordpress.com/2009/11/16/date-and-time-types-in-sql-server/
CONVERT(VARCHAR,GETDATE(),120)

Resources