SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 29.04.2011 09:28:48

mariec
Участник
Зарегистрирован: 19.04.2011
Сообщений: 8

повторяющие символы

помогити с решением задачи. есть табл Т1, тама есть поле name, surname и тд№ как можно вычислить если в каждом из этих поле повторяющиеся символы. Например "Воолодя" или т.п. Спс за рание

Неактивен

 

#2 29.04.2011 11:54:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: повторяющие символы

Тама нада писать праграмм

Неактивен

 

#3 29.04.2011 22:26:45

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: повторяющие символы

mariec, Вы же владеете русским языком, судя по этому топику. Одним sql-запросом такое не сделать (разве что хитрым регэкспом, и то не уверен), поэтому нужно либо все строки на клиент забрать и там уже анализировать, либо можно так:

DELIMITER $$
CREATE FUNCTION find_doubles(nam varchar(255))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE len INT UNSIGNED;
    DECLARE i   INT UNSIGNED;
    IF ISNULL(nam) THEN
        RETURN 0;
    END IF;
    SET len = length(nam);
    if (len <= 1) THEN
        RETURN 0;
    END IF;

    SET i = 1;
    WHILE i != len DO
      IF ( SUBSTR( nam, i, 1 ) = SUBSTR( nam, i+1, 1 )  ) THEN
        RETURN 1;
      END IF;
      SET i = i + 1;
    END WHILE;
    RETURN 0;
END $$

Функция делает то, что Вам нужно. сам запрос:
select * from `ИМЯ_ТАБЛИЦЫ` where find_doubles(name);

Отредактированно deadka (30.04.2011 15:01:59)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#4 03.05.2011 08:16:17

mariec
Участник
Зарегистрирован: 19.04.2011
Сообщений: 8

Re: повторяющие символы

deadka написал:

mariec, Вы же владеете русским языком, судя по этому топику. Одним sql-запросом такое не сделать (разве что хитрым регэкспом, и то не уверен), поэтому нужно либо все строки на клиент забрать и там уже анализировать, либо можно так:

DELIMITER $$
CREATE FUNCTION find_doubles(nam varchar(255))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE len INT UNSIGNED;
    DECLARE i   INT UNSIGNED;
    IF ISNULL(nam) THEN
        RETURN 0;
    END IF;
    SET len = length(nam);
    if (len <= 1) THEN
        RETURN 0;
    END IF;

    SET i = 1;
    WHILE i != len DO
      IF ( SUBSTR( nam, i, 1 ) = SUBSTR( nam, i+1, 1 )  ) THEN
        RETURN 1;
      END IF;
      SET i = i + 1;
    END WHILE;
    RETURN 0;
END $$

Функция делает то, что Вам нужно. сам запрос:
select * from `ИМЯ_ТАБЛИЦЫ` where find_doubles(name);

спасибо за направление, единствено то что плохо оракл и мускул операторы некоторые различные

Неактивен

 

Board footer

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