G2004F10138-0187
G2004F20138-0187
G2004F30138-0187
如何在-后面不齐前面的第一位的数字。结果。G2004F10138-10187,G2004F10138-20187,G2004F10138-30187
本帖已被设为精华帖!
G2004F10138-0187
G2004F20138-0187
G2004F30138-0187
如何在-后面不齐前面的第一位的数字。结果。G2004F10138-10187,G2004F10138-20187,G2004F10138-30187
从举的例子来看,还有很多未知的不确定因素,如长度是否都统一?前缀是否都是 G2004
?
如果长度统一,那么可以用 Text.At
获取第 7 个字符,然后用 Text.Insert
插入字符,写作:
= Text.Insert("G2004F30138-0187",12,Text.At("G2004F30138-0187",6))
但实际情况可能没这么简单,有可能位数不一样,或者最后一段只有两三个字符。
前缀先不管,将问题简化为:如何将 30138-87
变成 30138-30187
?
在 Excel 中的思路很简单,先用 len 分别截取左右的长度,然后用左边的长度减去右边的长度得到 3,再用 left 获取左边的前 3个字符,插入到右边的最前面。
在 Power Query 中也是一样的思路,只是换了个函数名:
let
a = "30138-87",
b = Text.Split(a,"-"),
c = Text.Start(a,Text.Length(b{0})-Text.Length(b{1})),
d = b{0}&"-"&c&b{1}
in
d
在 《发票号展开》 中有类似的案例。
从举的例子来看,还有很多未知的不确定因素,如长度是否都统一?前缀是否都是 G2004
?
如果长度统一,那么可以用 Text.At
获取第 7 个字符,然后用 Text.Insert
插入字符,写作:
= Text.Insert("G2004F30138-0187",12,Text.At("G2004F30138-0187",6))
但实际情况可能没这么简单,有可能位数不一样,或者最后一段只有两三个字符。
前缀先不管,将问题简化为:如何将 30138-87
变成 30138-30187
?
在 Excel 中的思路很简单,先用 len 分别截取左右的长度,然后用左边的长度减去右边的长度得到 3,再用 left 获取左边的前 3个字符,插入到右边的最前面。
在 Power Query 中也是一样的思路,只是换了个函数名:
let
a = "30138-87",
b = Text.Split(a,"-"),
c = Text.Start(a,Text.Length(b{0})-Text.Length(b{1})),
d = b{0}&"-"&c&b{1}
in
d
在 《发票号展开》 中有类似的案例。
= Table.AddColumn(源,"a",each Text.Replace([str],"-",[ x = List.LastN(Text.SplitAny([str],Text.Combine({"A".."z","-"})),2),
y = List.Transform(x,Text.Length),
z = "-"&Text.Start(x{0},y{0}-y{1})] [z]))