将字符串多次插入mysql,每次删除最后一个字符,只需一个查询

时间:2015-01-19 01:04:39

标签: mysql sql insert

使用MySQL,我希望编写一个插入查询,它将接受一个字符串并多次插入,每次删除最后一个字符。

所以查询就像

INSERT INTO table (str) VALUES ("string") .....

将导致插入以下值

string
strin
stri
str
st
s

我可以做这个PHP,但我想知道是否首先有一个SQL解决方案。

3 个答案:

答案 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