У меня есть даты в форме апрель-2019, май-2019 и т. Д., Которые хранятся в поле имени MonthYear.
Это источник вашей проблемы.Вы не должны хранить такие значения в своей таблице.
Вместо этого сохраняйте правильные даты и преобразуйте их в любое строковое представление, которое вы хотите на уровне представления.
Обязательно храните даты в столбцесо значимым, описательным именем.Не называйте это Date
, потому что на самом деле это не дата, о которой вы заботитесь, а комбинация месяца и года.Однако MonthYear
также может быть не лучшим выбором для имени этого столбца.
Я бы предложил MonthStartDate
или что-то в этом духе.
Это имя описывает, какие данные хранит столбец, а также означает, что разрешением даты, с которой вам нужно иметь дело, является месяц, а не день.
Вы можете, если хотите, добавить вычисляемый столбец в таблицу, чтобы сохранить значение даты MMM-YYYY.Это позволит вам сохранить уровень представления информации таким, какой он есть сейчас, однако имейте в виду, что база данных не должна отвечать за предоставление готовых к отображению данных.
Вот демонстрация:
Создать образец таблицы:
DECLARE @TBL TABLE (
MonthStartDate date,
MonthYear AS REPLACE(RIGHT(CONVERT(char(11), MonthStartDate, 113), 8), ' ', '-')
);
Заполнить таблицу:
INSERT INTO @TBL (MonthStartDate) VALUES
('2019-01-01'), ('2019-02-01'), ('2019-03-01'),
('2019-04-01'), ('2019-05-01'), ('2019-06-01'),
('2019-07-01'), ('2019-08-01'), ('2019-09-01'),
('2019-10-01'), ('2019-11-01'), ('2019-12-01'),
('2020-01-01');
Убедитесь, что столбец MonthYear возвращает желаемые результаты:
SELECT MonthStartDate, MonthYear
FROM @TBL
ORDER BY MonthStartDate
Результаты:
MonthStartDate MonthYear
2019-01-01 Jan-2019
2019-02-01 Feb-2019
2019-03-01 Mar-2019
2019-04-01 Apr-2019
2019-05-01 May-2019
2019-06-01 Jun-2019
2019-07-01 Jul-2019
2019-08-01 Aug-2019
2019-09-01 Sep-2019
2019-10-01 Oct-2019
2019-11-01 Nov-2019
2019-12-01 Dec-2019
2020-01-01 Jan-2020