【问题标题】:mysql char displaying just the first charactermysql char 只显示第一个字符
【发布时间】:2017-01-30 17:41:18
【问题描述】:

我的 MYSQL 表“Test”中有这个值 (=="Test") 该文本基本上是十进制格式。 更多信息:https://en.wikipedia.org/wiki/T#Computing_codes 我正在尝试将选择查询作为常规文本运行。 这些是我正在运行的测试:

1。 询问: select TRIM(Leading ',' FROM replace(trim(name),"",",")) from table where id = 1;

输出: 84,101,115,116

2。 询问: 选择字符(84,101,115,116);

输出:测试

3。 询问: select char(TRIM(Leading ',' FROM replace(trim(name),"",","))) from table where id = 1;

输出:T

我怎样才能得到整个单词而不是第一个字符?

谢谢,

尼尔。

【问题讨论】:

    标签: mysql select char ascii


    【解决方案1】:

    你没有得到预期的结果,因为

    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;
    

    【讨论】:

      【解决方案2】:

      正如 Mulcek 所说,您将看起来像逗号分隔的参数传递给 CHAR 函数,但这实际上是一个包含逗号的单个字符串。 MySQL 如此解释它并返回它识别的解码的第一个数字。

      一步解决方案是使用准备好的语句将整个查询构建为字符串,然后按如下方式执行:

      SET @VTestVar = '&#84&#101&#115&#116';
      SET @VExec = CONCAT('SELECT CHAR(', (SELECT TRIM(Leading ',' FROM REPLACE(TRIM(@VTestVar),"&#",","))), ') value;');
      
      PREPARE stmt FROM @VExec;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
      

      这里根据您的用例进行了调整:

      SET @VTestVar = '&#84&#101&#115&#116';
      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;
      

      问候,

      詹姆斯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        • 2014-03-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-19
        相关资源
        最近更新 更多