Javascript chartAt 不是 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$1(STRING) line 3,columns 110-111

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

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

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

预先感谢您的帮助。

解决方法

考虑使用 INITCAP 函数代替 JS UDF

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

例如

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

产生以下输出

enter image description here

,

你写错了函数名,“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 编辑器中尝试此查询

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...