Другой возможный подход с использованием пользовательского предложения ORDER BY
:
Ввод:
CREATE TABLE #Data (
[Period] varchar(7)
)
INSERT INTO #Data
([Period])
VALUES
('2014 Q2'),
('2014 Q1'),
('2018 Q3'),
('2016 Q1'),
('2017 Q4'),
('2018 Q4')
T-SQL:
SELECT TOP(1) [Period]
FROM #Data
ORDER BY
CONVERT(int, SUBSTRING([Period], 1, 4)) * 10 +
CONVERT(int, SUBSTRING([Period], 7, 1)) DESC
Выход:
-------
Period
-------
2018 Q4
Примечания. Если вы не уверены, что все ваши данные имеют формат yyyy Qq
, используйте TRY_CONVERT()
:
SELECT TOP(1) [Period]
FROM #Data
ORDER BY
COALESCE(TRY_CONVERT(int, SUBSTRING([Period], 1, 4)), 0) * 10 +
COALESCE(TRY_CONVERT(int, SUBSTRING([Period], 7, 1)), 0) DESC