session_start()
我只想选择“详细”非空的行。似乎很简单,但不是我无法正常工作。
q)tab
items sales prices detail
-------------------------
nut 6 10 "blah"
bolt 8 20 ""
cam 0 15 "some text"
cog 3 20 ""
nut 6 10 ""
bolt 8 20 ""
这将使所有行仍然静止。
或者我尝试过
q) select from tab where count[detail] > 0
这给我键入错误。
如何查询KDB中的非空字符串字段?
答案 0 :(得分:3)
您可以使用like来简化副词,而不必使用副词。
q)select from tab where not detail like ""
items sales prices detail
------------------------------
nut 1 10 "blah"
cam 5 9 "some text"
答案 1 :(得分:1)
当您需要逐行执行检查时,请使用each
:
select from tab where 0 < count each detail
这将产生下表:
items sales prices detail
------------------------------
nut 6 10 "blah"
cam 0 15 "some text"
答案 2 :(得分:1)
分别使用副词
:q)select from ([]detail:("blah";"";"some text")) where 0<count each detail
detail
-----------
"blah"
"some text"
答案 3 :(得分:1)
我将使用以下方法
select from tab where not detail~\:""
将每个细节与空字符串进行比较。使用not null detail
的方法不起作用,因为Q将字符串视为字符数组,并检查每个数组元素是否为null。即null "abc"
返回布尔数组000b
,但是where子句期望每个“行”具有单个布尔值
答案 4 :(得分:0)
如果表不大,另一种检查方法是将其转换为symbol
子句中的where
。
q)select from ([]detail:("blah";"";"some text")) where `<>`$detail
detail
-----------
"blah"
"some text"
或者简单地
q)select from ([]detail:("blah";"";"some text")) where not null `$detail
detail
-----------
"blah"
"some text"