如何在 Azure 数据工厂表达式中轻松提取 array/string 中的倒数第二个元素?
How to easily extract the 2nd last element in an array/string in Azure Data Factory Expression?
假设字符串是一个可变文件名,如下面的几个例子:
- file1_name_cr_001.csv
- file2_name1_name2.nn.123.456_updt_000.csv
- filename_2012.444.1234_utc_del_004.csv
最后 8 个字符串值的长度将始终保持固定,即 (_001.csv、_000.csv、_004.csv)。我们只需要提取 values = cr, updt, del
但是,ADF 中的 split() 和 substring() 均不允许负索引值并抛出错误:- 数组索引超出范围,否则此 split() 可能是最简单的方法,即 @split(variables('var1'),'_')[-2]
这是类似的主题:- https://github.com/MicrosoftDocs/azure-docs/issues/46070
请推荐一个最简单的方法。
谢谢!
我们或许可以在这里使用反向技巧:
SELECT
filename,
REVERSE(SUBSTRING(
REVERSE(filename),
CHARINDEX('_', REVERSE(filename)) + 1,
CHARINDEX('_', REVERSE(filename), CHARINDEX('_', REVERSE(filename)) + 1) -
CHARINDEX('_', REVERSE(filename)) - 1)) AS path
FROM yourTable;
请注意,以上内容可能根本无法正常执行。如果你需要快速访问各种路径组件,那么考虑在插入整个路径时将它们分开存储。
发现上述场景的此方法有效且更简单,因为我只需要找到正确的元素位置...因此,首先获取整个长度并减去所需的数组 element/string 位置 - 传递给分割():
@split(variables('var1'),'_')[sub(length(split(variables('var1'),'_')),2)]
假设字符串是一个可变文件名,如下面的几个例子:
- file1_name_cr_001.csv
- file2_name1_name2.nn.123.456_updt_000.csv
- filename_2012.444.1234_utc_del_004.csv
最后 8 个字符串值的长度将始终保持固定,即 (_001.csv、_000.csv、_004.csv)。我们只需要提取 values = cr, updt, del
但是,ADF 中的 split() 和 substring() 均不允许负索引值并抛出错误:- 数组索引超出范围,否则此 split() 可能是最简单的方法,即 @split(variables('var1'),'_')[-2]
这是类似的主题:- https://github.com/MicrosoftDocs/azure-docs/issues/46070
请推荐一个最简单的方法。
谢谢!
我们或许可以在这里使用反向技巧:
SELECT
filename,
REVERSE(SUBSTRING(
REVERSE(filename),
CHARINDEX('_', REVERSE(filename)) + 1,
CHARINDEX('_', REVERSE(filename), CHARINDEX('_', REVERSE(filename)) + 1) -
CHARINDEX('_', REVERSE(filename)) - 1)) AS path
FROM yourTable;
请注意,以上内容可能根本无法正常执行。如果你需要快速访问各种路径组件,那么考虑在插入整个路径时将它们分开存储。
发现上述场景的此方法有效且更简单,因为我只需要找到正确的元素位置...因此,首先获取整个长度并减去所需的数组 element/string 位置 - 传递给分割():
@split(variables('var1'),'_')[sub(length(split(variables('var1'),'_')),2)]