Substring 将子字符串放入新列

Substring 将子字符串放入新列,substring,kdb,q-lang,Substring,Kdb,Q Lang,我有一个表,其中包含一列,该列包含以下格式的数据-让我们调用列“title”和表“s” 头衔 我正在尝试获取“.”前面的字符的唯一列表,因此我最终得到以下结果: ab cde fghi 我曾尝试将初始列选择到表中,然后尝试进行更新,以创建一个新列,该列是使用“ss”的点的位置 大概是这样的: t: select title from s update thedot: (title ss `.)[0] from t 然后我打算尝试做第三列,即“title”中的“N”个字符,其中N是存储在“th

我有一个表,其中包含一列,该列包含以下格式的数据-让我们调用列“title”和表“s”

头衔

我正在尝试获取“.”前面的字符的唯一列表,因此我最终得到以下结果:

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

大概是这样的:

t: select title from s
update thedot: (title ss `.)[0] from t
然后我打算尝试做第三列,即“title”中的“N”个字符,其中N是存储在“thedot”列中的值

当我尝试更新时,得到的只是一个“类型”错误


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

之所以会出现类型错误,是因为
ss
只对字符串类型有效,而不对符号有效。Plus
ss
不是基于向量的函数,因此您需要将它与每个
组合

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
有几种方法可以解决您的问题:

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

您可以阅读此处了解更多信息:

另一种方法是使用运算符,围绕“.”分隔符进行解析。如果您有固定数量的“列”(如csv文件中的列),则此运算符特别有用。在这种情况下,如果有固定数量的列,并且我们只需要第一列,则可以返回“.”前面的不同字符列表,其中包括:

exec distinct raze("S ";".")0:string title from t
`ab`cde`fghi
或:


其中,
“S”
定义每列的类型,
是记录分隔符。对于列数不同的记录,最好使用
vs
操作符。

使用
每个右键的WooiKent答案的变体(
/:
):

exec distinct raze("S ";".")0:string title from t
`ab`cde`fghi
distinct raze("S ";".")0:string t`title
`ab`cde`fghi
q)exec distinct (` vs/:x)[;0] from t
`ab`cde`fghi