假设下面的代码位于过程或触发器中。 通过下面的代码,我能够将字符串“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;
如果您有一个数字表,可以使用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)
)