将子字符串放入新列

spi*_*n42 3 substring kdb q-lang

我有一个表格,其中包含一个具有以下格式数据的列 - 让我们将列称为“标题”,将表格称为“s”

标题

ab.123
ab.321 
cde.456
cde.654
fghi.789
fghi.987
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取“.”之前的字符的唯一列表。所以我最终得到了这个:

ab
cde
fghi
Run Code Online (Sandbox Code Playgroud)

我尝试将初始列选择到表格中,然后尝试进行更新以使用“ss”创建一个新列,该列是点的位置。

像这样:

t: select title from s
update thedot: (title ss `.)[0] from t
Run Code Online (Sandbox Code Playgroud)

然后我打算尝试做第三列,它是“标题”中的“N”个字符,其中 N 是存储在“thedot”列中的值。

我尝试更新时得到的只是“类型”错误。

有任何想法吗?我对 kdb 很陌生,所以毫无疑问以一种非常愚蠢的方式做一些简单的事情。

小智 6

您收到类型错误的原因是因为ss仅适用于字符串类型,而不适用于符号。Plusss不是基于向量的函数,因此您需要将它与每个'.

q)update thedot:string[title] ss' "." from t
title    thedot
---------------
ab.123   2
ab.321   2
cde.456  3
cde.654  3
fghi.789 4
Run Code Online (Sandbox Code Playgroud)

有几种方法可以解决您的问题:

q)select distinct(`$"." vs' string title)[;0] from t
x
----
ab
cde
fghi
q)select distinct(` vs' title)[;0] from t
x
----
ab
cde
fghi
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多信息:http : //code.kx.com/q/ref/casting/#vs