如何从kdb表中按索引删除列?

如何从kdb表中按索引删除列?,kdb,Kdb,例如,如何从下表中删除第一列: q)t: ([] a: (2018.09.25; 2018.09.25; 2018.09.25); b: `ABC`XYZ`BAC ; c: (10 20 30)) q)t a b c ----------------- 2018.09.25 ABC 10 2018.09.25 XYZ 20 2018.09.25 BAC 30 预期结果: b c --------- ABC 10 XYZ 20 BAC 30 可以使用从t中删除a,但我

例如,如何从下表中删除第一列:

q)t: ([] a: (2018.09.25; 2018.09.25; 2018.09.25); b: `ABC`XYZ`BAC ; c: (10 20 30))
q)t
a          b   c
-----------------
2018.09.25 ABC 10
2018.09.25 XYZ 20
2018.09.25 BAC 30
预期结果:

b   c
---------
ABC 10
XYZ 20
BAC 30

可以使用
从t中删除a
,但我希望能够在事先不知道确切列名的情况下删除a

您可以使用功能删除:

q){[t;index]![t;();0b;enlist cols[t]index]}[t;0]
b   c 
------
ABC 10
XYZ 20
BAC 30

使用parse查看q-sql语句的函数形式:

q)parse"delete a from t"
!
`t
()
0b
,,`a

如果您的表未设置关键字,则可以从字典中执行简单的删除操作:

 q) f:{[t;ind] enlist[cols[t] ind]_t}
 q) f[t;0] 
 b   c 
 ------
 ABC 10
 XYZ 20
 BAC 30

使用
翻转
放下

q)flip 1_flip 0!t
b   c
------
ABC 10
XYZ 20
BAC 30
你可以用

{(_/[cols x;desc y])#x}[t;0 2]
这将接收表中的列,获取要删除的索引,并使用删除扫描删除这些列。如果只想删除一个索引,则必须登记,如下所示:

{(_/[cols x;desc y])#x}[t;enlist 0] 

如果将空列表加入到索引中,它将适用于原子参数或列表参数
{(/[cols x;desc(),y])#x}[t;1]
{(/[cols x;desc(),y])#x}[t;01]
如果将空列表加入索引,它将同时适用于原子或列表参数,而不是使用
登记
,例如
{[t;index]![t;();0b;cols[t],[t],[t],[t],[t],[t;0]
索引
Nice-如果您将其更改为
((),cols[t]ind)\u t
它也适用于多个索引