Я хотел бы правильно использовать заглавные буквы, что в данном случае означает:
- Первая буква заглавная.
- Первая буква после пробела начинается с заглавной буквы («Ван Хельсинг», а не «Ван Хелсинг»)
- Первая буква после тире пишется с большой буквы («Джонсон-Смит», а не «Джонсон-Смит»)
- Другие буквы не пишутся с заглавной буквы.
Первое и последнее требования легко обрабатываются:
CONCAT(LEFT(name, 1), LOWER(RIGHT(name, LENGTH(name) - 1)))
Остальные сложнее. Я написал оператор REPLACE, вложенный в 54 раза (конечно, не вручную, я использовал Excel)
REPLACE(REPLACE(REPLACE(REPLACE(...,' b',' B'),'-b','-B'),' a',' A'),'-a','-A')
но я чувствую, что должно быть более элегантное и удобное решение. Есть идеи?
Если есть встроенная функция, которая похожа, но не идентична моим требованиям, то, вероятно, будет хорошо.
Редактировать: Этот сценарий будет запускаться только на именах, которые уже потеряли свою заглавную букву, поэтому при неправильном обращении с неясными именами нет опасности. Впрочем, было бы неплохо обрабатывать апострофы, такие как пробелы и тире. Просмотр текущих данных показывает, что многие (~ 30%) имен имеют хотя бы одно из [- '].