Вы могли бы сделать что-то вроде этого: (предупреждение, это некрасиво)
Создать таблицу для месячных имен и номеров:
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)
Как вы храните и где вы показываете даты? –
У меня есть MS SQL Server (в настоящее время 2008 R2/в ближайшее время 2014). В настоящее время я проверяю данные обычной командой SELECT, чтобы выяснить, как конвертировать. Затем я сделаю ОБНОВЛЕНИЕ по этим значениям, чтобы заменить их датами в желаемом стиле. – Volker
Не храните даты ни в чем, кроме введенного столбца 'DateTime', таким образом вы можете управлять форматированием в пользовательском интерфейсе, а сами данные региональный независимый. –