简体   繁体   English

MySQL,SELECT语句中的CONCAT

[英]MySQL, CONCAT in SELECT statement

(SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)

I'm using the above statement as part of an INSERT. 我将上面的语句用作INSERT的一部分。 The problem is the whole line is being translated to the value of @I (this is an index, values are ie 0, 1, 2, ...). 问题是整行都被转换为@I的值(这是一个索引,值即0、1、2,...)。 So, instead of getting the output of the SELECT I'm getting 0, 1, 2, ... 因此,不是获取SELECT的输出,而是获取0、1、2 ...

The expected value of the CONCAT is like "0_Delta" , then "1_Delta" , etc. Replacing the CONCAT by one of this works. CONCAT的期望值是"0_Delta" ,然后是"1_Delta" ,等等。用其中一项替代CONCAT。

Any comments will be appreciated. 任何意见将不胜感激。 Thanks! 谢谢!

[code] [码]

DROP TABLE IF EXISTS xxx_tb; 如果存在则删除表xxx_tb; CREATE TABLE xxx_tb ( i_Validity INT, Delta INT ); 创建表xxx_tb(i_Validity INT,Delta INT);

DROP TRIGGER IF EXISTS AFTER_INSERT_ON_tb_in; 如果存在AFTER_INSERT_ON_tb_in,则触发DROP; DELIMITER $$ CREATE TRIGGER AFTER_INSERT_ON_tb_in AFTER INSERT ON tb_in FOR EACH ROW BEGIN DELIMITER $$为每个行开始在tb_in上插入AFTER_INSERT_ON_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$$

DELIMITER ; 定界符; [code] [码]

delta is declared as an integer. delta被声明为整数。 You are getting a silent conversion from the string value. 您正在从字符串值获得静默转换。 Because @i is at the beginning, that is the value you are getting. 因为@i是开头,所以这就是您获得的值。

You can try declaring it as varchar(255) if you want a string value. 如果需要字符串值,可以尝试将其声明为varchar(255)

Your insert can be written more easily as an insert . . . select 您的insert可以更容易地作为insert . . . select编写insert . . . select insert . . . select insert . . . select : insert . . . select

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM