我的MYSQL表中有这个值"&#84&#101&#115&#116" (=="试验&#34) 这个文本基本上是十进制格式。 更多信息:https://en.wikipedia.org/wiki/T#Computing_codes 我正在尝试将选择查询作为常规文本运行。 这些是我正在运行的测试:
1。 查询: 从id = 1的表中选择TRIM(领先',' FROM替换(修剪(名称),"&#",",")) ;
输出: 84101115116
2。 查询: 选择char(84,101,115,116);
输出:测试
3。 查询: 从表中选择字符(TRIM(领先',' FROM替换(修剪(名称),"&#",","))) id = 1;
输出:T
我怎样才能得到整个单词而不只是第一个字符?
谢谢,
尼尔。
答案 0 :(得分:0)
你没有得到预期的结果,因为
TRIM(Leading ',' FROM replace(trim(name),"&#",","))
返回字符串而不是数组
'84,101,115,116'
然后 char()只解释第一组可读的数字。
如果您想继续,请查看使用procedures提出的类似问题。
您应该创建一个将字符串小数作为表结果集返回的过程,然后将其用作 CHAR()的输入。这样你就可以将复杂的逻辑移到程序中,然后像这样使用它(未经测试):
select
GROUP_CONCAT(
SELECT
char(*)
FROM
(
CALL database.getDecimalText()
)
) SEPARATOR '' )
from
table
where
id = 1;
答案 1 :(得分:0)
正如Mulcek所说,你传递的看起来像是逗号分隔的CHAR
函数的参数,但实际上这是一个包含逗号的单个字符串。 MySQL将其解释为此并返回它识别的已解码的第一个数字。
一步解决方案是使用预准备语句将整个查询构建为字符串,然后按如下方式执行:
SET @VTestVar = 'Test';
SET @VExec = CONCAT('SELECT CHAR(', (SELECT TRIM(Leading ',' FROM REPLACE(TRIM(@VTestVar),"&#",","))), ') value;');
PREPARE stmt FROM @VExec;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
此处根据您的使用情况进行了调整:
SET @VTestVar = 'Test';
SET @VExec = CONCAT('SELECT CHAR(', (SELECT TRIM(Leading ',' FROM REPLACE(TRIM(select TRIM(Leading ',' FROM replace(trim(name),"&#",",")) from table where id = 1),"&#",","))), ') value;');
PREPARE stmt FROM @VExec;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
此致
詹姆斯