繁体   English   中英

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

[英]How can I delete a column by index from a kdb table?

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

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

可以使用delete a from t但我希望能够在不事先知道确切列名的情况下进行删除。

您可以使用功能删除:

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

https://code.kx.com/q/ref/funsql/#delete

使用parse来查看q-sql语句的功能形式:

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

你可以用

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

这将获取表的列,获取要删除的索引,并使用删除扫描删除这些列。 如果您只想删除一个索引,则必须征募,就像这样:

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

如果您的表未输入密钥,则可以从字典中进行简单删除:

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

使用flipdrop

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM