我在sql中有这样的语句
Case WHEN AAAA is not null then AAAA
Else RTRIM(LEFT(BBBB, PATINDEX('%[0-9]%', BBBB) - 1))
END as NAME. 我需要将其转换为激发sql。我试过使用indexOf,但它不接受字符串'%0-9%。如何将上述语句转换为激发SQL。请帮帮忙
谢谢!
发布于 2019-10-12 15:25:00
我的代码用scala火花实现了这一点。我用udf做的。编辑:假设字符串需要从第一次出现的数字中删除。
import spark.implicits._
val df = Seq(("SOUTH TEXAS SYNDICATE 454C"),
("SANDERS 34-27 #3TF"),
("K. R. BRACKEN B 3H"))
.toDF("name")
df.createOrReplaceTempView("temp")
val getIndexOfFirstNumber = (s: String) => {
val str = s.split("\\D+").filter(_.nonEmpty).toList
s.indexOf(str(0))
}
spark.udf.register("getIndexOfFirstNumber", getIndexOfFirstNumber)
spark.sql("""
select name,substr(name, 0, getIndexOfFirstNumber(name) -1) as final_name
from temp
""").show(20,false)结果:
+------------------------------------+----------------------+
|name |final_name |
+------------------------------------+----------------------+
|SOUTH TEXAS SYNDICATE 454C |SOUTH TEXAS SYNDICATE |
|SANDERS 34-27 #3TF |SANDERS |
|K. R. BRACKEN B 3H |K. R. BRACKEN B |
|ALEXANDER-WESSENDORFF 1 (SA) A5 A 5H|ALEXANDER-WESSENDORFF |
|USZYNSKI-FURLOW (SA) B 3H |USZYNSKI-FURLOW (SA) B|
+------------------------------------+----------------------+发布于 2020-09-30 14:04:22
基于Manish的答案,我构建了这个,它更通用,是用Python构建的。您也可以在spark上使用它,示例不是用于数字,而是用于字符串日期。
import re
def PATINDEX(string,s):
if s:
match = re.search(string, s)
if match:
return match.start()+1
else:
return 0
else:
return 0
spark.udf.register("PATINDEX", PATINDEX)
PATINDEX('DATE','a2aDATEs2s')发布于 2022-04-19 10:22:35
可以使用以下方法使用Databricks或Spark删除前导零。
REPLACE(LTRIM(REPLACE('0000123045','0',' ')),' ','0')解释:
示例:‘123
示例:'123
然后,
类似地,您可以使用RTRIM函数相应地删除尾随零。
如果你喜欢我的答案,请投票。谢谢。
https://stackoverflow.com/questions/58329209
复制相似问题