【问题标题】:KDB: how to compare strings?KDB:如何比较字符串?
【发布时间】:2020-12-07 22:42:02
【问题描述】:

我有一列类型为 C。如何将该值与同一列中的前一个值进行比较?我做了col1 like prev col1 但它返回Correction hint: length 错误。我还创建了另一列newCol: prev col1,但仍然无法进行比较。我也试过=,但没有运气。我怎样才能做到这一点? 样本数据:

col1
Paris
London
London
New York
Singapore
Ha Noi

【问题讨论】:

    标签: kdb


    【解决方案1】:

    您可以使用prior 关键字吗?

    q)t
    col1       
    -----------
    "Paris"    
    "London"   
    "London"   
    "Ney York" 
    "Singapore"
    "Ha Noi"   
    q)select (~) prior col1 from t
    col1
    ----
    0   
    0   
    1   
    0   
    0   
    0  
    

    当比较字符串时,如果它们的长度相同,它将检查数组中每个槽中的每个字符是否相同,并返回一个布尔值列表来告诉您字符串在哪里相同。如果字符串是两个不同的长度,则会出现长度错误。如果您想测试两个字符串是否完全相同,可以使用~,无论字符串的长度如何,它都会起作用,并给您一个布尔值来告诉您它们是否相同。

    【讨论】:

      【解决方案2】:

      使用每个先验:https://code.kx.com/q/ref/maps/#each-prior

      有匹配:https://code.kx.com/q/basics/comparison/#match

          q)tab:([]col1:("Paris";"London";"London";"New York"))
          q)select col1,compare:(~':)col1 from tab
          col1       compare
          ------------------
          "Paris"    0
          "London"   0
          "London"   1
          "New York" 0
      

      【讨论】:

        【解决方案3】:

        您应该使用like' 而不是like,因为您不是在比较单个值,而是在列表中。

        update comparison: col1 like' prev col1 from 
          ([]col1:("Paris";"London";"London";"New York";"Singapore";"Ha Noi"))
        

        【讨论】:

          【解决方案4】:

          虽然这与 Matthews 和 jomahony 的回答基本相同,但 differ 关键字可以说更容易阅读/理解:

          q)select not differ col1 from ([]col1:("Paris";"London";"London";"New York"))
          col1
          ----
          0
          0
          1
          0
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-05
            • 2012-08-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多