2013-01-11 4 views
1

varchar 필드를 설정된 길이의 줄로 나누어야하지만 구분 기호는 없습니다.split_to_table() 문자 수 및 구분 기호 없음

예 :
출원 값 : 'Field example of varchar'
그리고 결과는해야 길이 5의 라인으로이를 분할 할 :

select regexp_split_to_table('Field example of varchar','(.{5})') as x 
:

"Field" 
" exam" 
"ple o" 
"f var" 
"char " 

나는이 쿼리를 시도했다

그러나 작동하지 않습니다, 그것은 5 개의 빈 줄을 반환합니다.

+0

: http://regex101.com/r/eP6zT1 - 당신이 {5} 변경해야 {1,5}는 잡으려고 문자열 길이가 5로 균등하게 나눌 수없는 것 같기 때문에 마지막 항목 (그 24). –

+0

문제는 regexp_split_to_table이 구분 기호간에 데이터를 보유하지만 구분 기호 자체는 보유하지 않는다는 것입니다. 해결책을 찾는 것이 흥미로울 것입니다. –

답변

1

당신은하지 regexp_split_to_table를 사용할 수 있지만 regexp_matches는 :

select (regexp_matches('Field example of varchar', E'.{1,5}', 'g'))[1] 
+0

고마워요. 완벽하게 작동합니다. –

2

당신은 generate_series()를 사용할 수 있습니다.
정규 표현식이 강력하지만 비싸서이기 때문에 실질적으로 regexp_matches()보다 빠를 것입니다. 열이 NULL 또는 비어있는 경우 다시 제시된 해결책 중 하나에 대한 아무것도를 얻을

SELECT substring(col, generate_series(1, length(col), 5), 5) 
FROM tbl; 

참고. 당신의 정규식 아무 문제가 거의 어쨌든 없다

-> SQLfiddle demonstrating both side by side.

+0

문자열도 값 비쌉니다. – Jasen