KDB从中选择正则表达式

时间:2017-05-24 02:57:00

标签: kdb

有没有办法使用正则表达式来定义select语句中的所有列。

之类的东西
select myColumnPrefix* from myTable

会显示以myColumnPrefix开头的所有列吗?

2 个答案:

答案 0 :(得分:3)

不使用qSQL,但是您可以使用正则表达式获取列名称,然后使用功能选择。例如,

c: cols[myTable] where cols[myTable] like "myColumnPrefix*";
?[myTable;();0b;c!c]

或者作为一个单行,

?[myTable;();0b;{x!x@:where x like "myColumnPrefix*"} cols myTable]

答案 1 :(得分:1)

如果你真的想使用qSQL(不建议 - 难以阅读/维护)那么你可以扩展@ostewart的建议:

定义表格:

q)t:([]foo1:1 2;foo2:3 4;foo3:5 6;bar1:1 2;bar2:3 4;bar3:5 6)
q)t
foo1 foo2 foo3 bar1 bar2 bar3
-----------------------------
1    3    5    1    3    5
2    4    6    2    4    6

提取感兴趣的列并准备为字符串:

q)c:", " sv string cols[t] where cols[t] like "foo*";
q)c
"foo1, foo2, foo3"

连接列以选择查询和值表达式:

q)value "select ",c," from t"
foo1 foo2 foo3
--------------
1    3    5
2    4    6