2015-06-18 4 views
0

Я хотел бы преобразовать значения даты в формате, специфичном для страны. Пример:MS SQL - преобразованная расширенная австрийская дата в другой формат даты

Монтаг, 07. Джаннер 2013 14:51:08

Это Нестандартные немецкий язык, но австриец. Я думаю, что это не проблема обмена австрийскими словами в stardard German Terms (в данном случае: Januar)

Мне не удалось преобразовать это с помощью команды SQL CONVERT, хотя это возможно.

Желаемая дата Stlye является 2015-06-18

+0

Как вы храните и где вы показываете даты? –

+0

У меня есть MS SQL Server (в настоящее время 2008 R2/в ближайшее время 2014). В настоящее время я проверяю данные обычной командой SELECT, чтобы выяснить, как конвертировать. Затем я сделаю ОБНОВЛЕНИЕ по этим значениям, чтобы заменить их датами в желаемом стиле. – Volker

+0

Не храните даты ни в чем, кроме введенного столбца 'DateTime', таким образом вы можете управлять форматированием в пользовательском интерфейсе, а сами данные региональный независимый. –

ответ

0

Вы могли бы сделать что-то вроде этого: (предупреждение, это некрасиво)

Создать таблицу для месячных имен и номеров:

CREATE TABLE Months 
(
    Month_Number char(2), 
    Month_Name varchar(20) 
) 

Заполнять его месяцами:

INSERT INTO Months VALUES 
('01', 'Jänner'), 
('02', 'Feber'), 
('03', 'März'), 
('04', 'April'), 
('05', 'Mai'), 
('06', 'Juni'), 
('07', 'Juli'), 
('08', 'August'), 
('09', 'September'), 
('10', 'Oktober'), 
('11', 'November'), 
('12', 'Dezember') 

Теперь приходит уродливая часть: используйте подстроку и PATINDEX создать стандартный формат даты:

DECLARE @StringDate varchar(50) = 'Montag, 07. Jänner 2013 14:51:08'; 

SELECT @StringDate As SourceDate, 
     -- Year 
     SUBSTRING(@StringDate, PATINDEX('%[0-9][0-9][0-9][0-9] %', @StringDate), 4) +'-'+ 
     -- Month 
     Month_Number +'-'+ 
     -- Day 
     SUBSTRING(@StringDate, PATINDEX('%, [0-3][0-9]. %', @StringDate) + 2, 2) +' '+ 
     -- Time 
     SUBSTRING(@StringDate, PATINDEX('% [0-2][0-9]:[0-5][0-9]:[0-5][0-9]%', @StringDate) + 1, 8) As NormallyFormattedDate 
FROM Months 
WHERE Month_Name = SUBSTRING(@StringDate, PATINDEX('%, [0-3][0-9]. %', @StringDate)+6, PATINDEX('%[0-9][0-9][0-9][0-9] %', @StringDate) - (PATINDEX('%, [0-3][0-9]. %', @StringDate)+6)) 

Результат:

SourceDate           NormallyFormattedDate 
-------------------------------------------------- --------------------- 
Montag, 07. Jänner 2013 14:51:08     2013-01-07 14:51:08 

Конечно, это будет работать только если формат является всегда то же самое (день недели, дд месяц. yyyy HH: mm: ss)

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

  • Нет связанных вопросов^_^