2015-02-10 21 views
0

我们使用类型C(即字符数组)定义了我们的KDB表。我们插入的第一个值有一个String类型。第二个值有一个int类型(即i)。现在,当我们试图用条件where like="value"查询KDB时,它不起作用。因为我们在一列中有混合类型,所以我们如何根据此列查询数据并对其进行过滤(在where子句中使用)?从KDB中的混合类型行中选择值

+0

你能否提供一个简单的ur表和使用查询的例子。这将有助于清楚地了解您的问题。 – Rahul 2015-02-10 12:39:37

回答

3

我几乎不想在这里给出一个解决方案,因为在单个列中混合字符串是一个可怕的想法。彻底摧毁性能并防止kdb提供的任何好处。

首先,重新考虑你的设置。

如果你坚持保留原样,就可以查询它是这样的:

tab:([] col1:`a`b`c;col2:1 2 3;col3:("foo";"bar";1i)) 

精确匹配

q)select from tab where col3~\:"foo" 
col1 col2 col3 
--------------- 
a 1 "foo" 

q)select from tab where col3~\:1i 
col1 col2 col3 
-------------- 
c 3 1 

对于正则表达式匹配

q)select from tab where {$[10h=type x;x like "f*";0b]}'[col3] 
col1 col2 col3 
--------------- 
a 1 "foo" 

不过不要”不要说你没有受到警告或不被告知!

0

@terrylynch说,你应该避免在列中混合类型。如果你这样做,你会失去很多速度,让你的生活变得活泼。我会说你应该做的第一件事就是检查你的进口数据(以及那些数据是什么样子)的方式。听起来像你可能想要以不同的方式表示数据。