1

我试图复制 oracleInstr函数,但在我看来,Oracle 中并不存在所有参数。我收到此错误,我想将此转换包含在表中的“平台”字段中,但我不能:

SELECT
SUBSTR(a.SOURCE, 0, INSTR(a.SOURCE, '-', 1, 2) - 1) AS plataforma,
COUNT(*) AS qtd
FROM db1.table AS as a
LEFT JOIN db1.table2 AS b ON a.ID=b.id
GROUP BY SUBSTR(a.SOURCE, 0, INSTR(a.SOURCE, '-', 1, 2) - 1)
ORDER BY qtd

Apache Spark 2.0 数据库在运行此查询时遇到错误。运行查询时出错:org.apache.spark.sql.AnalysisException:函数 instr 的参数数量无效。预期:2;发现:4;第 8 行第 45 行

我以这种方式进行了该领域的转换,但我不知道它是否正确:

在此处输入图像描述

如何在 Spark 中复制相同的 Oracle 函数?我只需要这样做:

资源:

apache-spark-sql
sql-server-dw

结果:

apache-spark
sql-server
4

1 回答 1

3

您正在寻找的是substring_index功能:

substring_index('apache-spark-sql', '-', 2)

它返回 2 次出现之前的子字符串-

我想你想在最后一次出现-. 因此,您可以计算-输入字符串中的数量并将其与substring_index如下函数结合使用:

substring_index(col, '-', size(split(col, '-')) - 1)

其中size(split(col, '-')) - 1给出 的出现次数-

于 2020-02-03T21:16:13.353 回答