2014-10-17 3 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 

난 다음 시도하고 N은 "thedot"열에 저장된 값은 "제목"에서 문자 "N"숫자가 될 것이다 제 3의 열을 할 거라고 .

내가 업데이트를 시도하면 "유형"오류가 발생합니다.

아이디어가 있으십니까? 나는 매우 바보 같은 방식으로 간단하게 무언가를하는 것에 대해 의심 할 여지없이 kdb에 대해 매우 새로운 것입니다.

답변

4

ss이 기호가 아닌 문자열 유형에서만 작동하기 때문에 유형 오류가 발생하는 이유는 다음과 같습니다. 플러스 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 

OR : 반환 할 수

distinct raze("S ";".")0:string t`title 
`ab`cde`fghi 
"S " 각 컬럼의 유형을 정의

"." 레코드 구분 기호입니다. 열 수가 다른 레코드의 경우 vs 연산자를 사용하는 것이 좋습니다.

관련 문제