В SQL Server, как преобразовать дату в строку в формате M/D/YYYY? (без начальных нулей, а не ММ/ДД/ГГГГ)

В настоящий момент мой код имеет следующее преобразование для поля даты:

convert(varchar, Citation.PublishedOn, 101)

Однако это возвращает даты, такие как 03/01/2010. Запрос состоял в том, чтобы даты отображались как 3/1/2010 (без начальных нулей, но с 4-значным годом). Я просмотрел http://msdn.microsoft.com/en-us/library/ms187928.aspx, и я не вижу ничего, что явно исключает ведущие нули.

Как мне форматировать дату для исключения начальных нулей?

Ответ 1

Вот как я это сделаю:

DECLARE @dt datetime
SET @dt= Citation.PublishedOn
SELECT LTRIM(STR(MONTH(@dt)))+'/'+LTRIM(STR(DAY(@dt)))+'/'+STR(YEAR(@dt),4)

Вы выбираете дату, затем извлекаете из нее день, месяц и год и отбиваете начальные нули за месяц и день, используя ltrim().

Если вы не хотите объявлять переменную, вы можете сделать это

SELECT LTRIM(STR(MONTH(Citation.PublishedOn)))+'/'+LTRIM(STR(DAY(Citation.PublishedOn)))+'/'+STR(YEAR(Citation.PublishedOn),4)

Однако это означало бы выведение одного и того же значения несколько раз.

Ответ 2

Вы можете использовать функцию FORMAT, которая построена именно для такого рода вещей, хотя я согласен, что если вы можете подождать, чтобы отформатировать ее на стороне клиента, вам может быть лучше, поскольку вы даете себе гибкость в использовании этих данных как дату в любой точке вдоль линии (ymmv - просто больше лучшей практики).

Пример:

FORMAT ( table.myDateColumn, 'd', 'en-US' )

См. http://msdn.microsoft.com/en-us/library/hh213505.aspx

Может быть недоступен в старых версиях SQL Server

Ответ 4

Я использовал другой подход, который более трюк:

REPLACE(REPLACE('a'+ @table.date ),'a0',''),'a','')

Я подумал, что это круто, но я понял, что неправильно интерпретировал трюк STUFF.:)