Pregunta

Right now, my code has the following conversion for a date field:

convert(varchar, Citation.PublishedOn, 101)

However, that returns 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?

¿Fue útil?

Solución

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.

Otros consejos

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. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top