Как конвертировать текстовой формат в дату?

Штука в том, что данные заданы как:

MYYYY_MM, где первая буква M - в прямом смысле буква M, YYYY - год, MM - месяц.

Однако, для октября - декабря данные заданы как, к примеру: M2020_10; в случае с месяцами раньше данные заданы как M2020_1, M2020_2 и т.д. (лишь одна цифра после нижнего подчёркивания).

Подскажите, пожалуйста, как правильно конвертировать текстовой формат в date9. отсюда?

Обрезал уже букву M через

substr (MONTH,2,7)

и даже попробовал вырезать _ , но дальше упёрся в разное кол-во цифр после этого знака...


Ответы (2 шт):

Автор решения: eri

Для MySQL есть функция STR_TO_DATE(str,fmt)

MariaDB [(none)]> select STR_TO_DATE('M2020_10', 'M%Y_%m');
+-----------------------------------+
| STR_TO_DATE('M2020_10', 'M%Y_%m') |
+-----------------------------------+
| 2020-10-00                        |
+-----------------------------------+

Тут день 00 - отсутствует, эта дата подойдет для операций сравнения. Но для арифметики нужно установить день. (но наш вопрос про SAS вроде)

Для POSTGRESQL есть to_date(str,fmt)

select to_date('M2020_2','M%Y_%MM');

С MySQL давно не работал, возможно он уже поддерживает to_date.

Читаю про SAS - какая-то странная штуковина.... но есть доки и формум.(правда проверить не на чем)

Попробуй определить новый формат данных:

picture mydatetime ( default=8)
low-high = 'M%Y_%m'   (datatype=datetime)
;

И через input форматнуть

input('M2020_10',mydatetime.)
→ Ссылка
Автор решения: user380707

Справился через:

MYYYY_MM -> (substr(MONTH,2,4)||substr(MONTH,7,2)) -> input (MONTH, yymmn6.) as MONTH format = date9.
→ Ссылка