0

我有以下函数将任何字符串转换为标题大小写:

CREATE OR REPLACE FUNCTION udf.title_case(str STRING)
  RETURNS STRING
  LANGUAGE js AS """
  return str
          .replace(/([^\\W_]+[^\\s-]*) */g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();})
  """;

更新:

我修复chartAtcharAt仍然得到同样的错误

它会产生以下错误:

"project.dataset.charAt" is not a function at UDF$1(STRING) line 3, columns 110-111

[]我可以通过使用不理想的表示法绕过这个错误,但是我遇到了同样的错误substr

我通常在 JSBin 或类似工具中测试我的函数并且工作正常,但是当将其转换为 Bigquery 时,我需要\在正则表达式中转义,然后处理这些突然出现的错误。

对于那些没有 JS 编程艺术经验的人来说,这会让他们的生活变得更加艰难。

在此先感谢您的帮助。

4

2 回答 2

1

考虑使用INITCAP函数而不是 JS UDF

它需要一个 STRING 并返回它,每个单词中的第一个字符为大写,所有其他字符为小写

例如

SELECT INITCAP('I have the following function to convert any string to title case:')        

产生低于输出

在此处输入图像描述

于 2021-07-07T14:37:33.327 回答
0

你写了错误的函数名,“char[t]At”而不是“charAt”。我使用 temp 函数进行测试

CREATE TEMP FUNCTION tempFunc(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 tempFunc("abce")

结果是“Abce”。您可以在 bigquery 编辑器中尝试此查询

于 2021-07-07T14:46:22.013 回答