MySQL 没有内置函数来拆分字符串,但您可以像这样创建一个:
DROP FUNCTION IF EXISTS SPLIT_STRING;
CREATE FUNCTION SPLIT_STRING(delim VARCHAR(3), str VARCHAR(255), pos INT)
RETURNS VARCHAR(255) DETERMINISTIC
RETURN
REPLACE(
SUBSTRING(
SUBSTRING_INDEX(str, delim, pos),
LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1
),
delim, ''
);
如果我正确理解了您的问题,您希望从查询中的查找表中获得答案。我认为它们在个别专栏中是最好的。在下面的代码中,我只是转置了两个答案,但您可以以类似的方式处理所有答案。
with mod_form_data as
(SELECT *, right(SPLIT_STRING('|', presentation, 1),1) first,
SPLIT_STRING('|', presentation, 2) second
from form_data)
select id, (select answer from answers where id = mfd.first),
(select answer from answers where id = mfd.second)
from mod_form_data mfd
我用您重新创建的数据进行了测试,如下所示。
CREATE TABLE form_data (
`id` INTEGER,
`evaluation` INTEGER,
`template` INTEGER,
`name` VARCHAR(24),
`label` varchar(2),
`presentation` VARCHAR(20),
`typ` VARCHAR(20),
`hasvalue` INTEGER,
`position` INTEGER,
`required` INTEGER,
`dependitem` INTEGER,
`dependvalue` varchar(100),
`options` VARCHAR(1),
`grade` INTEGER,
`correctanswer` varchar(100)
);
INSERT INTO form_data
(`id`, `evaluation`, `template`, `name`, `label`, `presentation`, `typ`, `hasvalue`, `position`, `required`, `dependitem`, `dependvalue`, `options`, `grade`, `correctanswer`)
VALUES
('286', '20', '0', 'Perform equipment test', '', 'r>>>>>5|4|3|2|1|NA', 'radiobuttonselection', '1', '24', '1', '0', '', 'h', '0', '');
create table answers (id integer, answer varchar(255));
insert into answers values (5, 'One answer');
insert into answers values (4, 'Another answer');