SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.05.2009 04:14:43

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Выбор данных с помощью регулярного выражения

Пожалуйста помогите, перерыл уже весь интернет, не могу найти решение на на вид очень простую задачу.

Есть таблица tbl_text с полем content и name.

в поле content записи:

My name is Vasya ,I live in Russia.
My name is Petya ,I live in America.
My name is Dima ,I live in Afrika.

поле name пустое.

нужно сделать UPDATE , вырезать имена и перенести в поле name.

Пытался сделать с REGEXP, ничего не получается.
Пожалуйста помогите составить запрос.

Отредактированно evgeny (09.05.2009 04:15:48)

Неактивен

 

#2 09.05.2009 11:20:52

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Выбор данных с помощью регулярного выражения

К сожалению, в MySQL инструментарий для работы с регулярными выражения довольно скудный. Позволяет только искать совпадение, подстроки вытаскивать нельзя.
Если у Вас строка перед именем фиксированной длины и имя без пробелов, то можно так:

UPDATE tbl_text SET name =
SUBSTRING_INDEX
    (
    SUBSTR('My name is Vasya, I live in Russia', 12), -- выкинет символы перед 'Vasya'
    ' ', -- пробел
    1
    )


Только вот после имени должна сначала запятая идти, а не пробел, если грамотно написано..

Неактивен

 

#3 09.05.2009 13:45:23

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Выбор данных с помощью регулярного выражения

Нет у меня не фиксированная длина.
Пример вымышленый, сделал просто простой пример, чтоб не путать людей...
Длина может быть любая ... Нужно вытаскивать имя, только с учётом что перед именем будет  'name is ' и после  ', I live'

Что делать ? мне нужно перепарсить 10 миллионов записей..
Неужели нет никакого выхода ?

Отредактированно evgeny (09.05.2009 13:49:25)

Неактивен

 

#4 09.05.2009 14:48:42

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Выбор данных с помощью регулярного выражения

В любом случае всегда есть выход использовать клиент, в котором есть нормальные функции работы с рег. выражениями (PHP, Perl и др.). Так будет более универсально.

В ситуации, которую Вы описали, можно выкрутиться так:

UPDATE tbl_text SET name =
    SUBSTRING(
        content,
        @start := LOCATE('name is ', content) + CHAR_LENGTH('name is '),
        LOCATE(', I live', content) - @start
    )

Неактивен

 

#5 09.05.2009 17:45:17

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Выбор данных с помощью регулярного выражения

Большое спасибо!
Все работает :-)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson