我需要大写一个字符串:
john doe - > John Doe
怎么做?
我想需要使用NORMALIZE_AND_CASEFOLD,但它会返回一个小写。
NORMALIZE_AND_CASEFOLD
NORMALIZE_AND_CASEFOLD(value [,normalization_mode]) 描述
采用STRING,value,并执行与NORMALIZE相同的操作,以及不区分大小写操作的casefolding。
NORMALIZE_AND_CASEFOLD支持四种可选的标准化模式:
值名称描述 NFC规范化形式规范组合通过规范等价来分解和重构字符。 NFKC规范化表单兼容性组合通过兼容性分解字符,然后通过规范等价重新组合它们。 NFD归一化形式规范分解通过规范等价来分解字符,并且按特定顺序排列多个组合字符。 NFKD规范化形式兼容性分解通过兼容性分解字符,并按特定顺序排列多个组合字符。
答案 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