В 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 и я не вижу ничего, что явно исключает ведущие нули.

Как отформатировать дату, чтобы исключить ведущие нули?

4 10

4 ответа:

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

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)

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

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

Пример:

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

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

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

Вы могли бы сделать:

STUFF (REPLACE ('/'+CONVERT(CHAR (10), Цитата.PublishedOn ,101),'/0','/'),1,1,")

(на основе http://www.sqlservercentral.com/Forums/Topic1241877-1292-1.aspx.)

Я выбрал другой подход, который больше похож на Трюк:

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

Я думал, что это было шикарно, но я получил идею после интерпретации трюка с вещами выше неправильно. :)