我想以国家/地区特定格式转换日期值。 样本:
Montag,07。Jänner201314:51:08
这是非标准德国人,但奥地利人。 我认为将奥地利语言换成标准德语术语(在本例中为Januar)是没有问题的。
我没有设法通过使用SQL命令CONVERT来转换它,尽管它可能是。
所需日期stlye是2015-06-18
答案 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)