KDB; 从符号列中剥离字符

big*_*377 5 symbols kdb q-lang

任何想法如何在KDB中做得很好?

考虑一下表格

X:([]a:1 2 3;b:`abc11`abc22`abc33;c:10 20 30)
Run Code Online (Sandbox Code Playgroud)

我现在想要一个新的表Y,它在第二列的符号中删除了"abc",这样:

Y:([]a:1 2 3;b:`11`22`33;c:10 20 30)
Run Code Online (Sandbox Code Playgroud)

Rya*_*ton 7

q)t:([]a:1 2 3;b:`abc11`abc22`abc33;c:10 20 30)
q)t
a b     c
----------
1 abc11 10
2 abc22 20
3 abc33 30
Run Code Online (Sandbox Code Playgroud)

剥去前三个字符:

q)update `$3_'string b from t
a b    c
---------
1 11 10
2 22 20
3 33 30
Run Code Online (Sandbox Code Playgroud)

或搜索和替换:

q)update `$ssr[;"abc";""] each string b from t
a b    c
---------
1 11 10
2 22 20
3 33 30
Run Code Online (Sandbox Code Playgroud)

如果表很大并且有许多重复项,请考虑使用.Q.fu:

q)t:1000000#([]a:1 2 3;b:`abc11`abc22`abc33;c:10 20 30)
q)\t r1:update `$3_'string b from t
111
q)\t r2:update .Q.fu[{`$3_'string x};b] from t
5
q)r1~r2
1b
Run Code Online (Sandbox Code Playgroud)