В 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
Ответ 3
Вы можете сделать:
STUFF (REPLACE ('/' + CONVERT (CHAR (10), Citation.PublishedOn, 101), '/0', '/'), 1,1, '')
(На основе http://www.sqlservercentral.com/Forums/Topic1241877-1292-1.aspx.)
Ответ 4
Я использовал другой подход, который более трюк:
REPLACE(REPLACE('a'+ @table.date ),'a0',''),'a','')
Я подумал, что это круто, но я понял, что неправильно интерпретировал трюк STUFF.:)