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