Google bigquery 大查询中的恰当格

Google bigquery 大查询中的恰当格,google-bigquery,Google Bigquery,在Big Query的“香蕉”一栏中有一句话“我想买香蕉” 我想得到“我想买香蕉”。我该怎么做?当我看到LOWER和UPPER时,我期待着正确的(香蕉)功能,但似乎不支持正确的情况 DZ 2020年10月更新: BigQuery现在支持函数,它接受一个字符串并返回它,每个单词的第一个字符为大写,所有其他字符为小写。非字母字符保持不变 所以,下面的花式shmancy UDF不再需要了——相反,您只需要使用 #standradSQL SELECT str, INITCAP(str) proper_s

在Big Query的“香蕉”一栏中有一句话“我想买香蕉”

我想得到“我想买香蕉”。我该怎么做?当我看到LOWER和UPPER时,我期待着正确的(香蕉)功能,但似乎不支持正确的情况

DZ

2020年10月更新:

BigQuery现在支持函数,它接受一个字符串并返回它,每个单词的第一个字符为大写,所有其他字符为小写。非字母字符保持不变

所以,下面的花式shmancy UDF不再需要了——相反,您只需要使用

#standradSQL
SELECT str, INITCAP(str) proper_str
FROM `project.dataset.table`
--~~~~~~~~~~~~~~~~~~

下面是BigQuery标准SQL的示例

#standradSQL
CREATE TEMP FUNCTION PROPER(str STRING) AS (( 
  SELECT STRING_AGG(CONCAT(UPPER(SUBSTR(w,1,1)), LOWER(SUBSTR(w,2))), ' ' ORDER BY pos) 
  FROM UNNEST(SPLIT(str, ' ')) w WITH OFFSET pos
));
WITH `project.dataset.table` AS (
  SELECT 'i Want to buy bananas' str
)
SELECT str, PROPER(str) proper_str
FROM `project.dataset.table`  
结果是

Row str                     proper_str   
1   i Want to buy bananas   I Want To Buy Bananas    

我进一步阐述了米哈伊尔·贝里扬特的答案,即在宣传之后也要大写(
-
),因为我需要对地名使用适当的大小写。必须从SPLIT函数切换到使用正则表达式来执行此操作

我在开始时测试一个空字符串,并返回一个空字符串(与null相反),以匹配本机上下函数的行为

CREATE TEMP FUNCTION PROPER(str STRING) AS (( 
  SELECT 
    IF(str = '', '',
      STRING_AGG(
        CONCAT(
          UPPER(SUBSTR(single_words,1,1)), 
          LOWER(SUBSTR(single_words,2))
        ), 
        '' ORDER BY position
      )
    )
  FROM UNNEST(REGEXP_EXTRACT_ALL(str, r' +|-+|.[^ -]*')) AS single_words
  WITH OFFSET AS position
));

WITH test_table AS (
  SELECT 'i Want to buy bananas' AS str
  UNION ALL
  SELECT 'neWCASTle upon-tyne' AS str
)

SELECT str, PROPER(str) AS proper_str
FROM test_table 
输出

Row str                     proper_str   
1   i Want to buy bananas   I Want To Buy Bananas  
2   neWCASTle upon-tyne     Newcastle Upon-Tyne

嗨,米哈伊尔,谢谢!这看起来有点过分了。你是否知道,为什么没有“适当的”本机函数?太好了!这就是我要找的!但坦率地说,GBQ应该有一个本机函数来实现这一点。