Буква T при преобразовании даты в Varchar

#sql #sql-server-2008 #datetime #varchar

#sql #sql-server-2008 #дата-время #varchar

Вопрос:

Я видел сообщение, похожее на это, в котором было решение, которое было бы скорее решением этой проблемы, чем решением.

Мы переносим SQL с 2008 на 2012 год. Уже существовал процесс, который нельзя изменить. В основном приложение принимает запросы, хранящиеся в БД, выполняет запросы по расписанию, а затем в некоторых случаях возвращает результаты и отправляет их в электронном письме в формате HTML.

Проблема в том, что текущее приложение при отправке электронного письма с использованием SQL 2008 возвращает дату в формате «мм / дд / гггг чч: мм: ss AM», но, используя точно такой же код на сервере 2012, мы получаем «гггг-мм-DDThh: ММ: SS.000» с военным временем и «Т» в середине даты и времени.

В решении, которое я видел в другом сообщении, говорилось, что в запросе дата должна быть отформатирована следующим образом:

 convert(nvarchar, start_date, 121) As [start_date]
  

Который работает…но это потребовало бы изменений во всех сотнях запросов, которые в настоящее время хранятся в данных. Он работает в текущей производственной среде с SQL 2008…но новое приложение, использующее SQL 2012, изменяет формат даты. На другом сайте я видел кого-то с аналогичной проблемой, но они использовали 2008 год, и проблема возникла еще в 2008 году. Там тоже нет реального разрешения.

Возможно, существует параметр, который мы можем упускать из виду? Клиент не хочет, чтобы мы меняли код, если только это не является абсолютно необходимым.

Таким образом, примером запроса, хранящегося в БД, будет:

 SELECT start_date FROM base_table
  

Затем хранимая процедура выполняет запрос и возвращает результаты в виде XML

 SET @sql = query   " FOR XML RAW ";
EXEC(@sql);
  

которые хранятся в поле varchar (max) в данных.

Другая хранимая процедура берет XML из этого поля и помещает HTML-теги вокруг XML-данных:

 '<TABLE>'   XML   '</TABLE>'
  

Затем отправляет электронное письмо с помощью dbmail.

Результаты в электронном письме для SQL2008 будут:

start_date

15.10.2004 1:00 вечера

21.10.2005, 17:25 вечера

Результаты в электронном письме для SQL 2012 будут:

start_date

2004-10-15T13:00:00.000

2005-21-21T17:25:00.000

Я знаю, что это запутанно … но это то, с чем нам приходится работать.

Спасибо

Комментарии:

1. Что использует pplication для подключения к SQL Server? Какой запрос он выполняет? Пожалуйста, также опубликуйте определения соответствующих полей.

2. Обновил сообщение … надеюсь, немного более понятное. Но главный вопрос в том… почему это должно отличаться на новом сервере? Есть идеи? Спасибо!

Ответ №1:

Вы можете указать формат даты по умолчанию с помощью команды set dateformat:

УСТАНОВИТЕ формат DATEFORMAT

Допустимые форматы: mdy, dmy, ymd, ydm, myd, dym