MySQL-将字段串联到附加字段

时间:2018-06-28 11:09:36

标签: mysql append concat

真的很简单-应该是。

我想压缩多个字段并将其追加到一个长文本字段。

我猜想这是一个concat函数,但是我不知道如何将串联值附加到具有现有值的同一行中的字段上。

是否有MySQL语句可以解决问题,还是我必须运行循环的php脚本?

示例...

ID | NAME | POSITION | NOTES
1 | Richard | Programmer | Not paid enough
2 | David | Manager | Lazy
3 | Hilary | Personnel Manager | Doesn't care

最终,我想删除NAME和POSITION字段,但是我想预先存储这些值,所以我想将“-” .NAME。“-” .POSITION连接起来,并将其附加到NOTES中,而不会丢失该字段中的任何数据结果就是...

ID | NAME | POSITION | NOTES
1 | Richard | Programmer | Not paid enough - Richard - Programmer
2 | David | Manager | Lazy - David - Manager
3 | Hilary | Personnel Manager | Doesn't care - Hilary - Personnel Manager

这有意义吗?

2 个答案:

答案 0 :(得分:0)

CONCAT函数可以在MySQL中轻松处理此问题:

SELECT
    ID,
    NAME,
    POSITION,
    CONCAT(NOTES, ' - ', NAME, ' - ', POSITION) AS NOTES
FROM yourTable;

答案 1 :(得分:0)

drop table if exists t;
create table t(ID int, NAME varchar(20), POSition varchar(20),NOTES varchar(500));
insert into t values
(1 , 'Richard' , 'Programmer' ,      'Not paid enough'),
(2 , 'David'   , 'Manager'    ,      'Lazy'),
(3 , 'Hilary'  , 'Personnel Manager','Doesnt care');

update t
set notes =
    CONCAT(NOTES, ' - ', NAME, ' - ', POSITION) 
where 1 = 1;

select * from t;

+------+---------+-------------------+------------------------------------------+
| ID   | NAME    | POSition          | NOTES                                    |
+------+---------+-------------------+------------------------------------------+
|    1 | Richard | Programmer        | Not paid enough - Richard - Programmer   |
|    2 | David   | Manager           | Lazy - David - Manager                   |
|    3 | Hilary  | Personnel Manager | Doesnt care - Hilary - Personnel Manager |
+------+---------+-------------------+------------------------------------------+
3 rows in set (0.00 sec)

最终,我要删除NAME和POSITION字段您确定要这样做吗?再次将比特取出来是很痛苦的。

如果任何元素为null,则concat如果不保证某个元素具有值,则将返回null,则需要进行ifnull测试

    update t
    set notes =
        CONCAT(IFNULL(NOTES,''), ' - ', IFNULL(NAME,''), ' - ', IFNULL(POSITION,'')) 
    where 1 = 1;

drop table if exists t;
create table t(ID int, NAME varchar(20), POSition varchar(20),NOTES varchar(500));
insert into t values
(1 , 'Richard' , 'Programmer' ,      'Not paid enough'),
(2 , 'David'   , 'Manager'    ,      'Lazy'),
(3 , 'Hilary'  , 'Personnel Manager','Doesnt care'),
(4 , 'HILARY'  , NULL,'DOES NOW') ;

update t
set notes =
    CONCAT(IFNULL(NOTES,''), ' - ', IFNULL(NAME,''), ' - ', IFNULL(POSITION,'')) 
where 1 = 1;

+------+---------+-------------------+------------------------------------------+
| ID   | NAME    | POSition          | NOTES                                    |
+------+---------+-------------------+------------------------------------------+
|    1 | Richard | Programmer        | Not paid enough - Richard - Programmer   |
|    2 | David   | Manager           | Lazy - David - Manager                   |
|    3 | Hilary  | Personnel Manager | Doesnt care - Hilary - Personnel Manager |
|    4 | HILARY  | NULL              | DOES NOW - HILARY -                      |
+------+---------+-------------------+------------------------------------------+
4 rows in set (0.00 sec)