В Trino (ранее Presto) отсутствует часто используемая функция, доступная в Excel, Hive, Oracle, PLSQL, Db2, python,… вот довольно простой и эффективный способ решить эту проблему своими руками.
Я отчаянно нуждался в этом, но я не мог найти ничего особенного для Трино (Престо теперь Трино). Я обнаружил, что это довольно простой обходной путь, который может работать для любой строки с любым количеством слов. Возьмем, к примеру, имя в нижнем регистре ...
Было ли это полезно? Средство отлично. Подписка Medium была лучшими 5 долларами, которые я когда-либо тратил. Присоединяйтесь, и я получу небольшой бонус.
Примерная таблица
WITH name_table AS (select ‘jordan lamborn’ as name)
name_table
+ — — — — — — — — + | name | + — — — — — — — — + | jordan lamborn | + — — — — — — — — +
Решено: как сделать первую букву каждого слова в Trino заглавной
Исходное значение varchar
'Иордан Ламборн'
Фрагмент кода
SELECT (array_join((transform((split(name_table.name,’ ‘)), x -> concat(upper(substr(x,1,1)),substr(x,2,length(x))))),’ ‘,’’)) FROM name_table
Результирующее значение
«Джордан Ламборн»
Как это работает
- Во-первых, функция split () с пробелом в качестве разделителя разбивает varchar на массив, содержащий каждое слово отдельно
split (name_table.name, '') ›› [«jordan ”,” Lamborn ”] - Затем мы воспользуемся функцией transform (), чтобы применить определенную обработку к каждому элементу нашего нового массива. Синтаксис преобразования работает так, что каждый элемент массива становится переменной x в нашей новой функции. Я думаю об этом как о цикле For в javascript.
transform ((split (name_table.name, '')), x - ›(НАША НОВАЯ ФУНКЦИЯ ИДЕТ ЗДЕСЬ)) - Первая часть нашей пользовательской функции будет извлекать первый символ (подстрока позиции 1) слова x, а затем использовать его с заглавной буквы с помощью upper ()
'j ordan' = x ›› верхний (substr (x, 1,1)) ›› 'J' - Вторая часть нашей пользовательской функции снова извлечет оставшуюся часть слова, используя substr (), а также длину () x
'j ordan' = x ›› ниже (substr ( x, 2, длина (x))) ›› 'ordan' - Итак, теперь у нас есть «J» и «ordan» после того, как было дано «jordan». Мы можем соединить эти две строки вместе, чтобы получить «Jordan», что нам и нужно. Этот фрагмент просто выполняет шаги 3 и 4, указанные выше, и складывает их вместе с запятой между ними.
concat (
upper (substr (x, 1,1)), lower (substr (x, 2, длина (x)))
) - Помните, что все это происходит внутри transform (), но в результате остается массив. Мы перешли от [«jordan», «lamborn»] к [«J ordan», «L amborn»].
(преобразование ((split (name_table.name, '')), x - ›concat (upper (substr (x, 1,1)), lower (substr (x, 2, длина (х)))))) - Функция array_join () позволит нам преобразовать наш массив в varchar. Нам просто нужно определить разделитель и нулевую замену. Разделителем будет тот же разделитель, который мы использовали для разделения varchar. Нулевое замещение будет пустым.
array_join (КОД МАССИВА ШАГА 6, ‘‘, ’’)
Итак, независимо от того, сколько слов в каждой строке, transform () применит эту функцию конкатенации / подстроки к каждому слову и выдаст новый массив. Оттуда мы сжимаем массив обратно в varchar, используя array_join ().
Что вы думаете? Я хотел бы услышать твои мысли.
Требуется вдохновение для расстановки приоритетов или планирования? Ознакомьтесь с этим сумасшедшим списком из более чем 135 идей по расстановке приоритетов. Хотите узнать о Среднем или Среднем и SEO?