【问题标题】:compare values of two string columns of a table in q kdb比较q kdb中表的两个字符串列的值
【发布时间】:2019-06-14 13:18:30
【问题描述】:

我们有一张桌子:

q)t:([] a:("abc";"def";"ghi";"lmn"); b:("abc";"xyz";"ghi";"def"); c:1 2 3 4)
q)t
a     b     c
-------------
"abc" "abc" 1
"def" "xyz" 2
"ghi" "ghi" 3
"lmn" "def" 4

预期输出:逐行匹配 a 列和 b 列并相应更新 mu 列

a     b     c mu
---------------------
"abc" "abc" 1 match
"def" "xyz" 2 unmatch
"ghi" "ghi" 3 match
"lmn" "def" 4 unmatch

当我在查询下运行失败时,输出是

q)select a,b,c, mu:?[any a like/: b; `match; `unmatch] from t
a     b     c mu
---------------------
"abc" "abc" 1 match
"def" "xyz" 2 match // Issue here, since match a value of column a in all value of b
"ghi" "ghi" 3 match
"lmn" "def" 4 unmatch

【问题讨论】:

    标签: kdb


    【解决方案1】:

    如果您希望进行逐行匹配,则可以使用 match 运算符 (~) 和 each-both 运算符(')。

     q) update  mu:?[a~'b;`match;`unmatch] from t
    

    【讨论】:

    • 你也可以使用字典而不是条件句:select a,b,c, mu:(10b!matchunmatch)a~'b from t
    • 其实也不需要字典。一个简单的清单就可以了。 update mu:`unmatch`match a~'b from t
    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多