2014-10-17 2 views
2

У меня есть таблица, которая содержит столбец, который содержит данные в следующем формате - позволяет называть столбец «заголовок» и таблицу «s»Получить подстроку в новый столбец

названия

ab.123 
ab.321 
cde.456 
cde.654 
fghi.789 
fghi.987 

Я пытаюсь получить уникальный список символов, которые появляются перед «.». так что я в конечном итоге с этим:

ab 
cde 
fghi 

Я попытался выбрать начальный столбец в таблицу затем пытается сделать обновление, чтобы создать новый столбец, положение точки с помощью «SS».

что-то вроде этого:

t: select title from s 
update thedot: (title ss `.)[0] from t 

я тогда буду стараться и делать 3-й столбец, который будет «N» количество символов из «заголовка», где N является значением, хранящимся в столбце «thedot» ,

Все, что я получаю, когда пытаюсь обновить, - это ошибка типа.

Любые идеи? Я очень новичок в kdb, поэтому, без сомнения, делаю что-то простое очень глупо.

ответ

4

Причина, по которой вы получаете ошибку типа, состоит в том, что 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 

Вы можете прочитать здесь для получения дополнительной информации: http://code.kx.com/q/ref/casting/#vs

0

Альтернативой является использование оператора 0:, чтобы разобрать вокруг "." разделитель. Этот оператор особенно полезен, если у вас есть фиксированное количество «столбцов», как в файле csv. В этом случае, когда существует фиксированное количество столбцов, и нам нужно только первое, список отдельных символов перед «.». могут быть возвращены с:

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

ИЛИ:

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

Где "S " определяет типы каждого столбца и "." является запись разделитель. Для записей с различным количеством столбцов было бы лучше использовать оператор vs.

Смежные вопросы