如何查询字段中的列表?

How do I query a list in a field?

我有一个 table 的形式:

t                             p      s    c
----------------------------------------------------------
2019.08.06D13:29:45.746200000 4.5    4    (," ";,"T";,"I")
2019.08.06D13:29:58.413500000 4.5148 14   (," ";,"T";,"I")
2019.08.06D13:30:00.072000000 4.65   1522 (," ";,"O")
2019.08.06D13:30:03.681300000 4.5048 1    (," ";,"I")
2019.08.06D13:30:04.045200000 4.5    5    (," ";,"I")

我正在尝试获取 13:00 处的行,该行包含 c 列中的 "O"

我觉得应该是这样的:

select from t where "O" in c

但它似乎不起作用(空结果)。我也在这个专栏上尝试了 raze,但它没有帮助。我做错了什么?

编辑 raze each c:

2019.08.06D13:29:45.746200000 4.5    4    " TI"
2019.08.06D13:29:58.413500000 4.5148 14   " TI"
2019.08.06D13:30:00.072000000 4.65   1522 " O"
2019.08.06D13:30:03.681300000 4.5048 1    " I"
2019.08.06D13:30:04.045200000 4.5    5    " I"

您需要 enlist"0",因为这是 c 值采用的形式。结合 each-right (/:) 你可以检查每个 c 值中是否有 enlist"0":

q)t:([]c:(enlist each(" ";"T";"I");enlist each(" ";"T";"I");enlist each(" ";"O");enlist each(" ";"I");enlist each(" ";"I")))
q)select from t where enlist["O"]in/:c
c
---------
," " ,"O"

不需要 enlist 如果你把结果夷为平地:

q)select from(update raze each c from t)where"O"in/:c
c
----
" O"

这个带有索引的简单示例的替代方法:

q)select from t where c[;1;0] = "O"
c
---------
," " ,"O"

尽管如果您不希望“O”成为每个列表中的第 2 项,这可能会被破坏。还要注意这只适用于 = 因为它归结为一个字符而不是一个字符串(这是一个字符列表)