如何查询字段中的列表?
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 项,这可能会被破坏。还要注意这只适用于 =
因为它归结为一个字符而不是一个字符串(这是一个字符列表)
我有一个 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 项,这可能会被破坏。还要注意这只适用于 =
因为它归结为一个字符而不是一个字符串(这是一个字符列表)