Database 基于kdb中的其他列值添加筛选器

Database 基于kdb中的其他列值添加筛选器,database,kdb,q-lang,Database,Kdb,Q Lang,我有一列包含欧元兑美元、美元兑卢比等符号。我需要根据货币对的前三个或后三个字母是否属于此列表的条件创建一个新列 参考:(“印度卢比”,“巴西卢比”…) 然后我必须创建一个新列“result”,如果条件满足,则将其更新为“yes”,否则为“No” 谁能帮我一下吗。谢谢 q)show t:([]pair:`EURUSD`USDINR`BLRUSD`INRBLR`BLREUR) pair ------ EURUSD USDINR BLRUSD INRBLR BLREUR 及 添加所描述的“resul

我有一列包含欧元兑美元、美元兑卢比等符号。我需要根据货币对的前三个或后三个字母是否属于此列表的条件创建一个新列
参考:(“印度卢比”,“巴西卢比”…)
然后我必须创建一个新列“result”,如果条件满足,则将其更新为“yes”,否则为“No”

谁能帮我一下吗。谢谢

q)show t:([]pair:`EURUSD`USDINR`BLRUSD`INRBLR`BLREUR)
pair
------
EURUSD
USDINR
BLRUSD
INRBLR
BLREUR

添加所描述的“result”列的简单查询如下

q)update result:((`$3_'string pair)in\:ref)or(`$3#'string pair)in\:ref from t
pair   result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
但以下替代方案可能会更快:

q)update result:0<count each ref inter/:`$0 3_/:string pair from t
pair   result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
q)更新结果:0给定

添加所描述的“result”列的简单查询如下

q)update result:((`$3_'string pair)in\:ref)or(`$3#'string pair)in\:ref from t
pair   result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1
但以下替代方案可能会更快:

q)update result:0<count each ref inter/:`$0 3_/:string pair from t
pair   result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1

q)更新结果:0给出与Alexanders示例相同的示例表
t
和参考
ref
,您还可以建立匹配的开始和结束序列列表:

q)show m:{raze(s,\:"*";"*",/:s:string(),x)}ref
"USD*"
"EUR*"
"*USD"
"*EUR"
然后找到与这些匹配的对:

q)update max each pair like/:\:m from t
pair   m
--------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1

同时考虑到构建列表
m
和运行查询的时间,该示例的效率低于上面的示例。如果您只需要构建列表
m
,则此示例可能更有效,但它将取决于列表的大小
ref

给出相同的示例表
t
和引用
ref
,从Alexanders示例中,您还可以构建匹配的开始和结束序列列表:

q)show m:{raze(s,\:"*";"*",/:s:string(),x)}ref
"USD*"
"EUR*"
"*USD"
"*EUR"
然后找到与这些匹配的对:

q)update max each pair like/:\:m from t
pair   m
--------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1

同时考虑到构建列表
m
和运行查询的时间,该示例的效率低于上面的示例。如果您只需要构建列表
m
,则此示例可能更有效,但它将取决于列表的大小
ref

另一种选择。检查结果列表中每对和/或每对值中的ref

q)ref:`USD`EUR
q)update result:(|/')ref in/: `$0 3_/: string pair from t
pair   result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1

另一种选择。检查结果列表中每对和/或每对值中的ref

q)ref:`USD`EUR
q)update result:(|/')ref in/: `$0 3_/: string pair from t
pair   result
-------------
EURUSD 1
USDINR 1
BLRUSD 1
INRBLR 0
BLREUR 1