等于在 KDB 中的列表比较期间不抛出错误
Equal not throwing error during list comparison in KDB
我有一个table
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
但是我在使用 '=' 选择多条记录时预期会出现错误 因为我应该使用 'in' ,但它返回正确的数据而不是抛出任何错误:
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
在第一种情况下,您将向量与原子进行比较。 =
在此操作中重载,因此它将向量中的每个元素与该原子进行比较
q)t[`s]
`GOOG`APPL
q)t[`s]=`GOOG
10b
在第二种情况下,您预计会出现错误,=
正在进行向量到向量的比较。 由于两个向量的长度相同,所以它可以工作并且不会抛出 length
错误 :
q)t[`s]=`GOOG`APPL
11b
更改顺序不会 return 由于逐个元素比较的原因:
q)t[`s]=`APPL`GOOG
00b
例如对于以下具有 3 个元素的 table
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
我有一个table
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
但是我在使用 '=' 选择多条记录时预期会出现错误 因为我应该使用 'in' ,但它返回正确的数据而不是抛出任何错误:
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
在第一种情况下,您将向量与原子进行比较。 =
在此操作中重载,因此它将向量中的每个元素与该原子进行比较
q)t[`s]
`GOOG`APPL
q)t[`s]=`GOOG
10b
在第二种情况下,您预计会出现错误,=
正在进行向量到向量的比较。 由于两个向量的长度相同,所以它可以工作并且不会抛出 length
错误 :
q)t[`s]=`GOOG`APPL
11b
更改顺序不会 return 由于逐个元素比较的原因:
q)t[`s]=`APPL`GOOG
00b
例如对于以下具有 3 个元素的 table
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