Одним из возможных решений является использование instr()
и substr()
для извлечения имени без группы.
SELECT substr("name", 1, instr("name", '@') - 1) "name",
to_date('1900-01-01', 'YYYY-MM-DD') + max("date") - 1 "date"
FROM elbat
GROUP BY substr("name", 1, instr("name", '@') - 1);
Другим вариантом является использование regexp_substr()
.
SELECT regex_substr("name", '^[^@]+') "name",
to_date('1900-01-01', 'YYYY-MM-DD') + max("date") - 1 "date"
FROM elbat
GROUP BY regex_substr("name", '^[^@]+');
У него есть преимущество, заключающееся в том, что в качестве имени используется вся строка, в ней не должно быть '@'
по сравнению с первым, дающим пустую строку (например, NULL
в Oracle) в таком случае.Регулярные выражения, вероятно, более требовательны к ресурсам.Вы также можете попытаться проверить наличие '@'
и применить substr()
к имени, если в нем есть '@'
.
Редактировать:
Если эти числа взяты из Excel, вы должны вычесть один день, так как Excel ошибочно рассматривает 1900 как високосный год .