MS SQL - 将扩展的奥地利日期转换为其他日期格式

时间:2015-06-18 11:45:25

标签: sql sql-server date

我想以国家/地区特定格式转换日期值。 样本:

  

Montag,07。Jänner201314:51:08

这是非标准德国人,但奥地利人。 我认为将奥地利语言换成标准德语术语(在本例中为Januar)是没有问题的。

我没有设法通过使用SQL命令CONVERT来转换它,尽管它可能是。

所需日期stlye是2015-06-18

1 个答案:

答案 0 :(得分: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')

现在出现了丑陋的部分:使用substring和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

当然,这只有在格式总是相同的情况下才会起作用(工作日,dd月.yyyy HH:mm:ss)