如何将含PATINDEX的MS SQL查询迁移至PySpark SQL引擎
MS SQL转PySpark SQL实现方案
原MS SQL语句核心是处理travel_time字段:找到第一个非0字符的位置,根据字段长度决定是否补前置0,最后拼接:00:00。PySpark SQL没有PATINDEX函数,可用regexp_instr实现等价逻辑,具体代码如下:
SELECT CASE WHEN length(travel_time) = 1 THEN concat('0', substring(travel_time, regexp_instr(travel_time, '[^0]', 1, 1)), ':00:00') ELSE concat(substring(travel_time, regexp_instr(travel_time, '[^0]', 1, 1)), ':00:00') END AS travel_time FROM sampleTable
关键函数替换说明
LEN()→length():均用于获取字符串长度PATINDEX('%[^0]%', travel_time)→regexp_instr(travel_time, '[^0]', 1, 1):两者功能一致,返回第一个匹配非0字符的位置- PySpark的
substring省略长度参数时,默认截取到字符串末尾,和原语句中SUBSTRING(..., LEN(travel_time)+1)的效果完全相同
内容的提问来源于stack exchange,提问作者Developer Rajinikanth
相关产品推荐
相关产品推荐

