在KDB中选择非空字符串行

时间:2018-09-25 01:24:05

标签: kdb

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中的非空字符串字段?

5 个答案:

答案 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"