2016-11-10 4 views
0

Как сделать REGEXP на всех столбцах?Как сделать REGEXP во всех столбцах таблицы?

Это мой стол:

mysql> select * from datatables_demo; 
+----+------------+-----------+-------------+--------+------------+--------+ 
| id | first_name | last_name | position | office | start_date | salary | 
+----+------------+-----------+-------------+--------+------------+--------+ 
| 1 | Tiger  | Nixon  | Accountant | Tokyo | 2016-11-08 | 320800 | 
| 2 | Garrett | Winters | Accountant2 | Tokyo | 2016-11-08 | 170750 | 
| 3 | Ashton  | Cox  | Accountant3 | Tokyo | 2016-11-08 | 86000 | 
| 4 | Cedric  | Kelly  | Accountant4 | Tokyo | 2016-11-08 | 433060 | 
+----+------------+-----------+-------------+--------+------------+--------+ 
4 rows in set (0.01 sec) 

Это, как я выбрать все столбцы и сделать REGEXP на 1 колонке first_name:

mysql> select * from datatables_demo WHERE first_name REGEXP 'T'; 
+----+------------+-----------+-------------+--------+------------+--------+ 
| id | first_name | last_name | position | office | start_date | salary | 
+----+------------+-----------+-------------+--------+------------+--------+ 
| 1 | Tiger  | Nixon  | Accountant | Tokyo | 2016-11-08 | 320800 | 
| 2 | Garrett | Winters | Accountant2 | Tokyo | 2016-11-08 | 170750 | 
| 3 | Ashton  | Cox  | Accountant3 | Tokyo | 2016-11-08 | 86000 | 
+----+------------+-----------+-------------+--------+------------+--------+ 
3 rows in set (0.00 sec) 

Как сделать REGEXP на все столбцы? Это моя попытка, но это не так.

mysql> select * from datatables_demo WHERE * REGEXP 'T'; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* REGEXP 'T'' at line 1 
mysql> 

может не работать его из docs

Должен ли я выписать REGEXP для каждого столбца:
select * from datatables_demo WHERE column1 REGEXP 'T' OR column2 REGEXP 'T' OR columnN REGEXP 'T';

ответ

2

вы можете либо записать его на колонку или использовать CONCAT до начала регулярного выражения Это. пожалуйста, подтвердите это:

SELECT * FROM datatables_demo where CONCAT(first_name, last_name, position, office) REGEXP 'T'; 
+0

tks, думаю, что это то, что я ищу. – HattrickNZ

+1

@HattrickNZ Обратите внимание, что это приведет к возврату строк, где регулярное выражение соответствует различным столбцам. Поэтому, если regexp является 'sj', он будет соответствовать' first_name = james' и 'last_name = jones', потому что конкатенация создает' jamesjones'. Вероятно, было бы лучше использовать 'CONCAT_WS()' для размещения разделителя между каждым столбцом. – Barmar

Смежные вопросы