In SQL Server, how to convert a date to a string in format M/D/YYYY? (no leading zeros, not MM/DD/YYYY)
Right now, my code has the following conversion for a date field:
convert(varchar, Citation.PublishedOn, 101)
However, that returns 开发者_JAVA百科dates like 03/01/2010. The request was to have the dates display as 3/1/2010 (without the leading zeros, but with a 4 digit year). I've looked at http://msdn.microsoft.com/en-us/library/ms187928.aspx and I'm not seeing anything that explicitly excludes leading zeros.
How do I format the date to exclude leading zeros?
This is how I would do it:
DECLARE @dt datetime
SET @dt= Citation.PublishedOn
SELECT LTRIM(STR(MONTH(@dt)))+'/'+LTRIM(STR(DAY(@dt)))+'/'+STR(YEAR(@dt),4)
You select your date, then extract the day, month and year from it and chop the leading zeroes off the month and day using ltrim()
.
If you don't want to declare a variable, you can do this
SELECT LTRIM(STR(MONTH(Citation.PublishedOn)))+'/'+LTRIM(STR(DAY(Citation.PublishedOn)))+'/'+STR(YEAR(Citation.PublishedOn),4)
However, that would mean pulling out the same value multiple times.
You can use the FORMAT function, which is built for just this sort of thing, although I agree that if you can wait to format it on the client side you may be better off as you give yourself the flexibility to use that data as a date at any point along the line (ymmv - just more of a best practice).
Example:
FORMAT ( table.myDateColumn, 'd', 'en-US' )
See http://msdn.microsoft.com/en-us/library/hh213505.aspx
May not be available in older versions of SQL Server
You could do:
STUFF(REPLACE('/'+CONVERT(CHAR(10), Citation.PublishedOn ,101),'/0','/'),1,1,'')
(Based on http://www.sqlservercentral.com/Forums/Topic1241877-1292-1.aspx.)
I took a different approach, which is more of a trick:
REPLACE(REPLACE('a'+ @table.date ),'a0',''),'a','')
I thought it was spiffy, but I got the idea after interpreting the STUFF trick above incorrectly. :)
精彩评论