【发布时间】:2018-07-18 07:16:12
【问题描述】:
我有一个名为 table_1 的 MySQL 表:
mysql> select * from table_1;
+----------+-----------+----------+-------+
| col_1 | col_2 | col_3 | col_4 |
+----------+-----------+----------+-------+
| 123 | ABCD | TTTTT | 3 |
| 46542 | ABCD/HIJ | AAAAAAAA | 9 |
| 23 | ABCDEFGH | CCC | 45 |
| 5675 | ABCD/HIJ | NNNN | 0 |
| 65165 | NJFD | QQQQ | 0 |
| 165464 | NULL | HHH | 8 |
| 16546541 | ABCABC | LLLLLL | 0 |
| 764316 | ABCD/BBJH | NULL | 3 |
| 3125 | NULL | EEEEEE | 91 |
+----------+-----------+----------+-------+
9 rows in set (0.00 sec)
DDL:
CREATE TABLE IF NOT EXISTS table_1 (
col_1 INT(11) NOT NULL,
col_2 VARCHAR(45) DEFAULT NULL,
col_3 VARCHAR(10) DEFAULT NULL,
col_4 INT(11) NOT NULL
);
插入数据:
INSERT INTO table_1(col_1,col_2,col_3,col_4)
VALUES (123,'ABCD','TTTTT',3),
(46542,'ABCD/HIJ','AAAAAAAA',9),
(23,'ABCDEFGH','CCC',45),
(5675,'ABCD/HIJ','NNNN',0),
(65165,'NJFD','QQQQ',0),
(165464,NULL,'HHH',8),
(16546541,'ABCABC','LLLLLL',NULL),
(764316,'ABCD/BBJH',NULL,3),
(3125,NULL,'EEEEEE',91);
我想要做的是选择 col_1 和一个新的 MySQL 生成的第二列,比如 col_new。
- 如果 col_2 为 NULL,则 col_new 也应为 NULL。
- 如果 col_2 不为 NULL 但 col_3 为 NULL,则 col_new 也应为 NULL。
- 如果 col_2 和 col_3 都不是 NULL,则 col_new 应该与 col_3 相同。
- 在 3 中有一个特殊情况。如果 col_2 和 col_3 都不是 NULL 并且 col_3 = 'CCC' 那么 col_new 应该是
concat(col_3, 'v', col_4)在这种情况下应该是 'CCCv45'。
我知道我将不得不使用concat,例如:select col_1, concat(col_3, 'v', col_4) from table_1
但是我怎样才能实现上述所有 4 个条件呢?
【问题讨论】: