【问题标题】:MySQL, CONCAT in SELECT statementSELECT 语句中的 MySQL、CONCAT
【发布时间】:2014-11-17 02:04:01
【问题描述】:
(SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)

我将上述语句用作 INSERT 的一部分。问题是整行都被转换为 @I 的值(这是一个索引,值是 0、1、2、...)。所以,我没有得到 SELECT 的输出,而是得到 0, 1, 2, ...

CONCAT 的预期值类似于"0_Delta",然后是"1_Delta" 等。用其中一个替换 CONCAT。

任何 cmets 将不胜感激。谢谢!

[代码]

如果存在则删除表 xxx_tb; 创建表 xxx_tb ( i_Validity INT, 达美INT );

如果在 AFTER_INSERT_ON_tb_in 之后存在则删除触发器; 分隔符 $$ 在 AFTER_INSERT_ON_tb_in 之后创建触发器 插入 tb_in 后 每一行 开始

SET @ID = NEW.id_tb;
SET @TYPE = (SELECT Type FROM header WHERE id_tb = @ID);


IF @TYPE = 'abcd' THEN

    SET @SAMPLES = (SELECT SampleNumber FROM table WHERE id_tb = @ID);

    IF(@SAMPLES > 1) THEN
        SET @I = 0;
        WHILE(@I < @SAMPLES) DO

            INSERT INTO xxx_tb
            (
                i_Validity, 
                Delta
            ) 
            VALUES 
            ( 
                (SELECT 0_Validity FROM table WHERE id_tb = @ID), 
                (SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)
            );
            SET @I = @I + 1;

        END WHILE;

    END IF;

END IF;


END$$

分隔符; [代码]

【问题讨论】:

  • 请显示整个INSERT查询。
  • 和表中的字段
  • 我同意。如果你有它在括号中,它不会输出选择的行,而是准备它以供在更大的语句中使用。尝试不带括号或显示完整的声明。
  • Garr Godfrey,请问您指的是哪个括号?这(i_Validity,Delta)?

标签: mysql


【解决方案1】:

delta 被声明为整数。您正在从字符串值进行静默转换。因为@i在开头,那是你得到的值。

如果你想要一个字符串值,你可以尝试将它声明为varchar(255)

您的insert 可以更轻松地写成insert . . . select

    INSERT INTO xxx_tb(i_Validity, Delta) 
        SELECT `0_Validity`, CONCAT(@I, '_Delta')
        FROM table WHERE id_tb = @ID);

【讨论】:

  • 感谢您轻松插入!拜托,你能多谈谈这种无声的转变吗?您的意思是 CONCAT 没问题,但 SELECT 的输出正在被静默转换?
  • 您正在将字符串值分配给整数。通过将初始数字转换为数字,将字符串转换为整数。
猜你喜欢
  • 1970-01-01
  • 2014-12-23
  • 2021-12-04
  • 1970-01-01
  • 2021-11-28
  • 2014-03-30
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多