2013-08-25 15 views
0

Наши пользователи хранения значений даты в следующем формате:Как преобразовать формат даты в формат даты и времени?

Mon. DD, YYYY 

Пример:

Sept. 23, 2013 

Обратите внимание на период после того, как Mon.

Мы хотели бы конвертировать этот формат:

MM/dd/yyyy 

Пример:

9/23/2013 

Я попытался это:

SELECT CONVERT(VARCHAR(10), TrainingDates, 101) AS TrainingDates 
FROM tblTrainingDates 

, но я получаю Sept. 23,

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

Любые мысли, как справиться с этим?

Заранее спасибо.

ответ

2

Это следует сделать это:

SELECT CONVERT(DATETIME, REPLACE('Sept. 23, 2013','.',''), 107) 

Это удаляет точку в строку и преобразует в формат даты и времени 107.

И это возвращает строку, которую вы хотели (MM/DD/YYYY):

SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, REPLACE('Sept. 23, 2013','.',''), 107), 101) 

Для других типов форматов см: http://www.sqlusa.com/bestpractices/datetimeconversion/ и http://www.sql-server-helper.com/tips/date-formats.aspx

Редактировать:
Получается, что это работает для меня из-за словенского языка (сентябрь). Это один должен работать на английском языке локали:

SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, SUBSTRING('Sept. 23, 2013', 0, 4) + ' ' + SUBSTRING('Sept. 23, 2013',6,9), 107), 101) 

As a function.

+0

Благодарим вас за быстрый ответ. Когда я запускаю свой код, я получаю: «Конверсия не удалась при преобразовании даты и времени из символьной строки». –

+0

Странный .. mine возвращает '09/23/2013'. Какую версию SQL Server вы используете? – mata

+1

Это может зависеть от локали ... также, я думаю, что CONVERT (107) ожидает 3-символьные месяцы –

0

Дата декодирования может быть сделано перед обновлением базы данных

Dim inp As String = "Sept. 23, 2013" 
Dim fi As Globalization.DateTimeFormatInfo 
fi = New System.Globalization.DateTimeFormatInfo 
fi.LongDatePattern = "MMM. dd, yyyy" 
fi.AbbreviatedMonthNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", ""} 
Dim d As Date = DateTime.ParseExact(inp, "D", fi) 
Dim result as String = d.ToString("MM\/dd\/yyyy") 

Ключевой момент использует DateTimeFormatInfo Class, что позволяет выполнить настройку форматов. Обратите внимание, что в AbbreviatedMonthNames находится Сен заменен на Сент..

Вместо ParseExact можно использовать TryParseExact, чтобы избежать исключения, если строка ввода не в правильном формате.

+0

так как я могу использовать это в сочетании с моей операцией sql? –

+0

Когда вы обрабатываете пользователя перед хранением данных в базе данных, используйте фрагмент кода для подготовки данных, например. Операция UPDATE. Если строки хранятся в базе данных, вы используете эту процедуру при чтении данных. Вы даже можете определить .net-процедуры на SQL-сервере, чтобы иметь эквивалент Convert, но я не эксперт в нем. – IvanH

Смежные вопросы