在Spark SQL中找到字符串中的字符索引

时间:2019-07-02 08:53:06

标签: apache-spark-sql pyspark-sql databricks

我是SQL人士,是Spark SQL的新手

如果需要,我需要找到字符索引'-'在字符串中的位置,然后我需要将字符的固定长度放入,否则长度为零

string name = 'john-smith'

如果'-'位于字符位置4,则为10,否则为长度0

我已经在SQL Server中完成了,但是现在需要在Spark SQL中完成。

select 
case 
when charindex('-', name) = 4 then 10
else 0 
end 

我在Spark SQL中尝试过,但未能获得结果。

select find_in_set('-',name) 

请帮助。谢谢

1 个答案:

答案 0 :(得分:3)

您可以使用如下所示的instr函数。 insrt检查第二个str参数是否是第一个参数的一部分,如果是,则返回从1开始的索引。

//first create a temporary view if you don't have one already
df.createOrReplaceTempView("temp_table")

//then use instr to check if the name contains the - char
spark.sql("select if(instr(name, '-') = 4, 10, 0) from temp_table")

if语句的参数为:

  • instr(name, '-') = 4的检查条件
  • 有效条件有10条结果
  • 0个错误条件的结果