Javascript chartAt 不是 UDF$1(STRING) 处的函数

Javascript chartAt is not a function at UDF$1(STRING)

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

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();})
  """;

更新:

我将 chartAt 修改为 charAt,但仍然出现相同的错误

并产生以下错误:

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

我可以通过使用 [] 符号来绕过这个错误,这并不理想,但是我用 substr.

遇到了同样的错误

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

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

在此先感谢您的帮助。

考虑使用 INITCAP 函数代替 JS UDF

它接受一个字符串,returns每个单词的第一个字符大写,所有其他字符小写

例如

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

产生以下输出

你写错了函数名,“char[t]At”而不是“charAt”。 我使用临时函数来测试

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 编辑器中尝试此查询