Google BigQuery 字符串类型替换函数

Any*_*nya 7 string replace google-bigquery

我正在尝试替换数据中的某些客户名称。我能够使用 Google BigQuery 语言执行 SQL,通过某个特定字符串的替换函数将字符串的一部分转换为另一部分。

Replace(CustomerName, 'ABC', 'XYZ')
Run Code Online (Sandbox Code Playgroud)

但是,我还有更多需要使用替换功能,这样

Replace(CustomerName, 'PLO', 'Rustic')
Replace(CustomerName, 'Kix', 'BowWow')
Run Code Online (Sandbox Code Playgroud)

等等。

我试过做

Replace(CustomerName, 'ABC', 'XYZ') OR Replace(CustomerName, 'PLO', 'Rustic') OR Replace(CustomerName, 'Kix', 'BowWow')

但这给了我一条错误消息。

我也尝试过

Replace(CustomerName, 'ABC', 'XYZ') AND Replace(CustomerName, 'PLO', 'Rustic') AND Replace(CustomerName, 'Kix', 'BowWow')

但这也给我带来了一条错误消息。

我可以只使用“case when 语句”,然后对每个语句进行硬编码,但我想知道是否有更好/更快的方法来只使用替换语句。

感谢您的帮助。

Jer*_*dit 7

这个CASE WHEN选项相当合理。另一种选择是将它们链接在一起:

REPLACE(
  REPLACE(
    REPLACE(
      CustomerName,
      'ABC',
      'XYZ'),
    'PLO',
    'Rustic'),
  'Kix',
  'BowWow')
Run Code Online (Sandbox Code Playgroud)

您选择哪一个实际上取决于具体的场景。链式REPLACE调用可能更快,但它们可能会以奇怪的方式重叠(例如,如果一个替换的输出与后续替换的输入匹配)。该CASE WHEN方法避免了这个问题,但它可能更昂贵,因为您需要执行一项操作来查找子字符串,并执行另一项操作来实际替换它。

请注意,当您使用ANDor时OR,您试图将 的字符串输出组合起来,REPLACE就好像它是布尔值一样,这就是它失败的原因。