如何大写字符串?

时间:2018-06-12 07:54:15

标签: string google-bigquery

我需要大写一个字符串:

john doe - > John Doe

怎么做?

我想需要使用NORMALIZE_AND_CASEFOLD,但它会返回一个小写。

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

NORMALIZE_AND_CASEFOLD

NORMALIZE_AND_CASEFOLD(value [,normalization_mode]) 描述

采用STRING,value,并执行与NORMALIZE相同的操作,以及不区分大小写操作的casefolding。

NORMALIZE_AND_CASEFOLD支持四种可选的标准化模式:

值名称描述 NFC规范化形式规范组合通过规范等价来分解和重​​构字符。 NFKC规范化表单兼容性组合通过兼容性分解字符,然后通过规范等价重新组合它们。 NFD归一化形式规范分解通过规范等价来分解字符,并且按特定顺序排列多个组合字符。 NFKD规范化形式兼容性分解通过兼容性分解字符,并按特定顺序排列多个组合字符。

2 个答案:

答案 0 :(得分:3)

下面是BigQuery Standard SQL并使用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` 

答案 1 :(得分:0)

也许这比简单的方法要复杂一点...

CONCAT(UPPER(SUBSTR(field,1,1)),SUBSTR(Bets.status_code,2,CHAR_LENGTH(field)))作为CapitalizedField