Azure Data Factory中indexOf表达式与函数的解读及相关问题咨询
关于Azure Data Factory中indexOf函数的详解
我来帮你一步步把这个问题理清楚,先从最基础的概念说起~
1. 「索引值」到底是什么?
在字符串处理里,索引值是从0开始计数的位置标记——也就是说,字符串的第一个字符位置是0,第二个是1,第三个是2,以此类推。这和我们平时从1开始数的习惯不一样,这也是很多人困惑的核心点。
2. 示例indexOf('hello world', 'world')为什么返回6?
我们把'hello world'的每个字符按索引拆开来数就懂了:
- 索引0:
h - 索引1:
e - 索引2:
l - 索引3:
l - 索引4:
o - 索引5:
(空格) - 索引6:
w(这正是子串'world'的第一个字符)
indexOf函数的作用就是返回目标子串第一个字符所在的索引位置,所以这里返回6。
3. 你的表达式返回结果分析
先把你给出的表达式拆解开来看:
@if(greater(indexof(string(pipeline().parameters.Config),'FilenameMask'),0),pipeline().parameters.Config.FilenameMask,'')
已知pipeline().parameters.Config是{"FilenameMask":"accounts*."},我们一步步算:
- 第一步:把Config转成字符串
string(pipeline().parameters.Config)会把这个JSON对象转换成字符串,结果是:"{\"FilenameMask\":\"accounts*.\"}"(这里的\"是JSON字符串里的转义引号,实际字符序列里,F的索引位置是2) - 第二步:执行indexOf查找
indexof(..., 'FilenameMask')会找到子串'FilenameMask'的第一个字符F的索引——这里是2,所以返回2。 - 第三步:判断greater(2,0)
2肯定大于0,所以这个判断结果是true。 - 第四步:执行if函数的分支
因为判断为true,所以会返回第一个分支的内容:pipeline().parameters.Config.FilenameMask,也就是accounts*.。
如果哪天Config里没有FilenameMask这个字段,indexOf会返回-1,这时候greater(-1,0)是false,就会返回空字符串''。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

