Ниже для стандартного SQL BigQuery и с использованием JS UDF (первый запрос) и SQL UDF (второй)
#standardSQL
CREATE TEMPORARY FUNCTION capitalize(str STRING)
RETURNS STRING
LANGUAGE js AS """
return str.replace(
/\\w\\S*/g,
function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
);
""";
SELECT str, capitalize(str) capitalized_str
FROM `project.dataste.table`
или
#standardSQL
CREATE TEMPORARY FUNCTION capitalize(str STRING) AS ((
SELECT STRING_AGG(CONCAT(UPPER(SUBSTR(word, 1, 1)), LOWER(SUBSTR(word, 2))), ' ' ORDER BY pos)
FROM UNNEST(SPLIT(str, ' ')) word WITH OFFSET pos
));
SELECT str, capitalize(str) capitalized_str
FROM `project.dataste.table`
, вы можете проверить выше сфиктивные данные как
WITH `project.dataste.table` AS (
SELECT 'john doe' AS str UNION ALL
SELECT 'abc xyz'
)
с результатом для обеих опций:
Row str capitalized_str
1 john doe John Doe
2 abc xyz Abc Xyz
Добавлена наименее подробная / более упрощенная версия для JS UDF
#standardSQL
CREATE TEMPORARY FUNCTION capitalize(str STRING)
RETURNS STRING
LANGUAGE js AS """
return str.replace(/\\b(.)/g, function(match, chr){return chr.toUpperCase();});
""";
SELECT str, capitalize(str) capitalized_str
FROM `project.dataste.table`