Как сделать строку заглавной? - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно прописать строку:

Джон Доу -> Джон Доу

Как это сделать?

Полагаю, нужно использовать NORMALIZE_AND_CASEFOLD, но он возвращает нижний регистр.

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#normalize_and_casefold

NORMALIZE_AND_CASEFOLD

NORMALIZE_AND_CASEFOLD (значение [, normalization_mode])Описание

Принимает STRING, значение и выполняет те же действия, что и NORMALIZE, а также перенос регистра для операций без учета регистра.

NORMALIZE_AND_CASEFOLD поддерживает четыре необязательных режима нормализации:

Имя значения Описание Форма нормализации NFC Каноническая композиция Разлагает и перекомпоновывает символы по канонической эквивалентности.Композиция совместимости форм нормализации NFKC Разлагает символы по совместимости, а затем перекомпоновывает их по канонической эквивалентности.Форма нормализации NFD Каноническая декомпозиция Разлагает символы по канонической эквивалентности, и несколько комбинируемых символов располагаются в определенном порядке.Совместимость форм нормализации NFKD Декомпозиция Разбивает символы по совместимости, и несколько комбинируемых символов располагаются в определенном порядке.

Ответы [ 2 ]

0 голосов
/ 27 августа 2019

Может быть, это немного сложнее, чем более простой способ ...

CONCAT (UPPER (SUBSTR (поле, 1,1)), SUBSTR (Bets.status_code, 2, CHAR_LENGTH (поле))) as CapitalizedField

0 голосов
/ 12 июня 2018

Ниже для стандартного 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` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...