使用MySQL,我希望编写一个插入查询,它将接受一个字符串并多次插入,每次删除最后一个字符。
所以查询就像
INSERT INTO table (str) VALUES ("string") .....
将导致插入以下值
string
strin
stri
str
st
s
我可以做这个PHP,但我想知道是否首先有一个SQL解决方案。
答案 0 :(得分:1)
如果你有一个数字表,你可以这样做:
insert into table(str)
select left(@str, n.n)
from (select 1 as n union all select 2 union all select 3 union all select 4 union all
select 5 union all select 6 union all select 7 union all select 8 union all select 9
) n
where length(@str) >= n.n
order by n.n desc;
答案 1 :(得分:1)
这种方法要求您创建另一个表并使用数字预填充它,但这很容易做,如果这是您必须重复执行的操作,则有意义。我刚刚在SQLFiddle
中对此进行了测试create table table1 (string1 varchar(10));
create table table2 (number1 integer);
insert into table2 values (1);
insert into table2 values (2);
insert into table2 values (3);
insert into table2 values (4);
insert into table2 values (5);
insert into table2 values (6);
insert into table2 values (7);
insert into table2 values (8);
insert into table2 values (9);
insert into table2 values (10);
insert into table1 (string1)
select left(stringval, number1)
from (select 'ninechars' as stringval ) as a
join table2 on table2.number1 <= char_length(a.stringval)
select * from table1
STRING1
n
ni
nin
nine
ninec
ninech
ninecha
ninechar
ninechars
当然,在这种情况下,table2必须有足够的行作为您需要插入的字符串的最大长度。
答案 2 :(得分:0)
最简单的方法是编写存储过程,然后调用它来执行插入操作。
DELIMITER #
CREATE PROCEDURE 'insert_string_rows' (IN 'str' text)
BEGIN
DECLARE len int unsigned;
SET len = CHAR_LENGTH(str);
WHILE len > 0 DO
INSERT INTO table VALUES (str);
SET str = SUBSTR(str, 1, len - 1);
SET len = CHAR_LENGTH(str);
END WHILE;
END#
DELIMITER ;
然后只是
CALL insert_string_rows ("string")
然后将所有行弹出到&#39;表&#39;
string
strin
stri
str
st
s