このようなもの:
CREATE TABLE testbed (p_id int4,name varchar(50),skills text);
INSERT INTO testbed VALUES
(1,'Sam','#IT #communication #administration'),
(2,'Alex','#French #Trainer');
SELECT row_number() OVER () AS id,
p_fid, skill
FROM (SELECT
p_id AS p_fid,
regexp_split_to_table(
regexp_replace(skills, '^#', ''),
'[ ]+#') AS skill FROM testbed) AS s;
Window、
文字列操作、および配列関数のドキュメントをご覧ください。
スキルの位置を本当に制御する必要がある場合は、もう少し複雑なクエリが必要です。
WITH arrays AS (
SELECT p_id,
regexp_split_to_array(regexp_replace(skills, '^#', ''), '[ ]+#') arr
FROM testbed
), series AS (
SELECT p_id, generate_series(1, array_upper(arr, 1)) i
FROM arrays
)
SELECT row_number() OVER (ORDER BY a.p_id, s.i) AS id,
a.p_id AS p_fid,
a.arr[s.i] AS skill
FROM arrays a
JOIN series s ON a.p_id = s.p_id
ORDER BY a.p_id, s.i;