提问者:小点点

由于版本原因,mysql查询无法工作


假设下面的代码位于过程或触发器中。 通过下面的代码,我能够将字符串“name”转换为字符,然后将每个字符转换为ascii代码,将其合并在一起并存储在变量“result”中。

例如:假设name是“hello”,那么它看起来就像是“104101108108111”,其中h=104,e=101,l=108,o=111。

因为我搜索了CTE仅有的8.0+版本的工作,所以我想知道是否有人可以帮助我做我需要做的事情,所以它可以在旧版本上工作,也许不使用CTE的或其他东西。 谢谢

    declare name varchar(15);
    declare result decimal(64,0);

    with recursive cte as (
        select name as name, left(name, 1) as val, 1 as idx
        union all
        select name, substring(name, idx + 1, 1), idx + 1 
        from cte 
        where idx < char_length(name)
    )
    select group_concat(ascii(val) order by idx separator '') ascii_word from cte into result;

共1个答案

匿名用户

如果您有一个数字表,可以使用join:

select group_concat(ascii(substr(name, n.n, 1)) order by n.n eparator '') as ascii_word
       into result
from name join
     (select 1 as n union all
      select 2 union all
      . . .
     ) n
     on length(name) <= n.n;

您可以将列表扩展到适合您的问题的合理长度,或者在数据库中维护一个具有足够多行的数字表。 您还可以使用现有的表,代码如下:

 (select (@rn := @rn + 1) as n
  from existing cross join
       (select @rn := 0) params
  where @rn < length(name)
 )