Как конвертировать текстовой формат в дату?
Штука в том, что данные заданы как:
MYYYY_MM, где первая буква M - в прямом смысле буква M, YYYY - год, MM - месяц.
Однако, для октября - декабря данные заданы как, к примеру: M2020_10; в случае с месяцами раньше данные заданы как M2020_1, M2020_2 и т.д. (лишь одна цифра после нижнего подчёркивания).
Подскажите, пожалуйста, как правильно конвертировать текстовой формат в date9. отсюда?
Обрезал уже букву M через
substr (MONTH,2,7)
и даже попробовал вырезать _ , но дальше упёрся в разное кол-во цифр после этого знака...
Ответы (2 шт):
Для 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.)
Справился через:
MYYYY_MM -> (substr(MONTH,2,4)||substr(MONTH,7,2)) -> input (MONTH, yymmn6.) as MONTH format = date9.