在KDB中列表比较期间等于不抛出错误

时间:2018-03-27 19:43:10

标签: kdb

我有一张桌子

t:([] s:`GOOG`APPL;d:2?.z.d ;t:2?.z.t)

我在选择单个记录时使用=:

q)select from t where s=`GOOG
s    d          t           
----------------------------
GOOG 2017.01.25 04:30:47.898

但我希望在使用' ='选择多个记录时出现错误因为我应该使用' ,但它返回正确的数据而不是抛出任何错误:

q)select from t where s=`GOOG`APPL
s    d          t           
----------------------------
GOOG 2017.01.25 04:30:47.898
APPL 2007.12.27 04:07:38.923

1 个答案:

答案 0 :(得分:2)

在第一种情况下,您要将矢量与原子进行比较。 =为此操作重载,因此它会将向量中的每个元素与该原子进行比较

q)t[`s]
`GOOG`APPL

q)t[`s]=`GOOG
10b

在第二种情况下,您期望错误,=正在进行矢量比较向量。 由于两个矢量的长度相同,因此不会引发length错误

q)t[`s]=`GOOG`APPL
11b

由于逐元素比较,更改顺序不会返回任何内容:

q)t[`s]=`APPL`GOOG
00b

e.g。对于包含3个元素的下表

t:([] s:`GOOG`APPL`HP;d:3?.z.d ;t:3?.z.t)
q)t[`s]
`GOOG`APPL`HP

你会收到length错误

q)t[`s]=`GOOG`APPL
'length

因此使用in可以解决错误

q)t[`s] in `GOOG`APPL
110b