代码之家  ›  专栏  ›  技术社区  ›  DanCue

从列表中查找第N个最早(最早)日期,日期是部分字符串

  •  1
  • DanCue  · 技术社区  · 2 年前

    我想从文本字符串列表中获得第N个最古老的日期。数据如下所示:

    日期
    100% (05/29/2024)
    100% (11/08/2022)
    100% (03/28/2022)
    100% (11/08/2022)
    100% (10/25/2022)
    0%
    25% (05/29/2024)
    100% (08/25/2022)
    100% (10/25/2022)

    如果N=1,则结果应该是最早的日期或 03/28/2022 如果N=3,则结果应该是 10/05/2022 .

    我知道这个功能 SMALL() MID() 但我不知道如何将这两者结合起来,同时只查找那些有日期的字段。只有那些>0%将包括日期,但只应评估100%的日期。

    4 回复  |  直到 2 年前
        1
  •  1
  •   JvdV    2 年前

    也许可以试试:

    =IFERROR(INDEX(SORT(--REGEXEXTRACT(A1:A9,"^100% \((\d\d\/\d\d\/\d{4})\)$")),1),"No Value")
    

    这样,您只会在字符串以“100%”开头并遵循正确输入模式的其余部分时提取日期。这里的“1”是你的“N”。只要根据需要进行更改即可。

        2
  •  1
  •   rockinfreakshow    2 年前

    以下是您可以测试的一种方法:

    =let(n,B1,
     query(sort(split(A:A,"()")),"Select Col2 Where Col1=1 limit 1 offset "&n-1))
    

    enter image description here

        3
  •  1
  •   z..    2 年前

    您还可以使用:

    =INDEX(QUERY(SPLIT(A1:A9,"()"),"where Col1=1 order by Col2"),n,2)
    

    改变 n 到您想要的号码。对于 n=1 ,我们有:

    enter image description here

    对于水平范围,使用 TOCOL :

    =INDEX(QUERY(SPLIT(TOCOL(A1:I1),"()"),"where Col1=1 order by Col2"),1,2)
    

    enter image description here

        4
  •  0
  •   Kreeszh    2 年前

    =索引(排序(ARRAYFORMULA)(iferor(日期值(iferer(REGEXEXTRACT(A2:A10,“[0-9]{2}/[0-9]{2}/[0-9]{4}”)))),1,true),1,1)

    更改范围以反映公式的regextract部分中的数据(例如,此处为A2:A10)。

    倒数第二个数字将是第N位,代表最古老的数字。