func:{[query] value query};
查询是我的功能的一部分。我添加了一些像删除xxx,yyyy(值查询)和一些操作。我不确定为什么当我不使用值“查询”时,该功能不起作用。它说它找不到表。所以我必须在函数中使用值查询,查询是一个参数。我需要将“select from tab”传递给函数。
我的问题是:如果过滤器也是字符串,我该如何发送?
func["select from tab where a="abc""] <<< this does not work
如何在字符串中生成字符串?
另外,不确定为什么我
func["select from tab where date = max date"] it did not work due to length error
but func["100#select from tab where date = max date"] it works ?
整个功能是
getTable:{[query]loadHDB[];.Q.view date where date < .z.D-30;tab:(delete xxxx,yyyyy,sub,ID,subID,tID,subTID,text,gID from((value query)));remove[];update {";"sv @[s;where (s:";"vs x) like "cId=*";:;enlist""]}each eData from (update {";"sv @[s;where (s:";"vs x) like "AId=*";:;enlist""]}each eData from tab)};
remove:{[]delete tab from `.};
loadHDB:{[]value "\\l /hdb};
答案 0 :(得分:3)
您可以使用反斜杠http://code.kx.com/wiki/Reference/BackSlash#escape
来转义引号func["select from tab where a like \"abc\""]
编辑:
如果tab是HDB表,则此长度错误可能指向列长度问题(100#正在避免)。以下是什么回报?
q)checkPartition:{[dt] a!{c!{count get x} each ` sv' x,/:c:({x where not x like "*#"} key[x])except `.d}each a:(` sv' d,/:key[d:hsym `$string dt])};
q)check:checkPartition last date
q)(where{1<count distinct value x}each check)#check
答案 1 :(得分:1)
我喜欢用-3!并且-1也打印结果。如果您知道如果从控制台执行查询应该是什么样子,那么在构造字符串之后,使用-1来打印字符串。它应该打印查询,如控制台将如何执行。
q)stst:-3!
q)"select max age by user from tab where col1 like ",stst"Hello"
"select max age by user from tab where col1 like \"Hello\""
q)/then to view how it will be executed, use -1
q)-1"select max age by user from tab where col1 like ",stst"Hello";
select max age by user from tab where col1 like "Hello"
q)/looks good