如何手动构造以下功能语句

时间:2019-11-13 18:37:20

标签: kdb

我需要为以下表达式创建一个功能声明

select from table where not any venue like/:("tst1";tst2)

这就是我现在拥有的:

(enlist(~:;(any;((/:;like);`venue;(enlist;a)))))

其中a可以为"tst1"("tst1";tst2)

这是问题。我想将a作为参数传递,但是它不起作用。 该行应如下所示:

(enlist(~:;(any;((/:;like);`venue;(enlist;"tst1";"tst2")))))

任何人都有建议。我有点卡住了。

1 个答案:

答案 0 :(得分:3)

首先让我们使用PS C:\Windows\system32> Measure-Command -Expression { $ProcessCPU = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | Select-Object @{Name='Id';Expression={[int]$_.IDProcess}}, PercentProcessorTime $Processes = Get-Process -IncludeUserName | Select-Object ` @{Name='Id';Expression={[int]$_.Id}}, @{Name='Name';Expression={[string]$_.Name}}, @{Name='Description';Expression={[string]$_.Description}}, @{Name='Path';Expression={[string]$_.Path}}, @{Name='Company';Expression={[string]$_.Company}}, @{Name='Username';Expression={[string]$_.UserName}}, @{Name='SessionId';Expression={[string]$_.SessionId}}, @{Name='StartTime';Expression={[string](($_.StartTime).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"))}}, @{Name='MemoryMB';Expression={[int]([math]::Round($_.WorkingSet/1MB,2))}} $Output = $ProcessCPU + $Processes | Group-Object -Property Id } TotalSeconds : 2.9656969 来查看树:

parse

接下来,让我们使用q)parse "select from table where not any venue like/:(\"tst1\";\"tst2\")" ? `table ,,(~:;(max$["b"];((/:;like);`venue;(enlist;"tst1";"tst2")))) 0b () 技巧在您的like语句中构建元素列表

enlist,

让我们拼凑起来

q)0N!enlist,`a`b;
(enlist;`a;`b)

// let's define 'a' and use the same method
q)a:("tst1";"tst2")
q)enlist,a
enlist
"tst1"
"tst2"
q)0N!enlist,a;
(enlist;"tst1";"tst2")

请注意,您在那里没有使用任何形式的正则表达式,因此最好使用直接匹配:

// define table
q)table:([]venue:("tst1";"tst2";"tst3"))
q)?[`table;enlist(not;(any;((/:;like);`venue;enlist,a)));0b;()]
venue
------
"tst3"

HTH,肖恩