Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> regexp в запросе, левые символы?? 
:(
    Опции темы
Bulat
Дата 11.8.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Есть запрос:

Код

SELECT GROUP_CONCAT( DISTINCT IF(UPPER(SUBSTR(s_name,1,1)) REGEXP '^[а-я]', UPPER(SUBSTR(s_name,1,1)), '.') SEPARATOR '')
FROM arts


По сути - нужно получить все первые буквы из всех названий и сгруппировать их в виде алфавита(можно не упорядоченного). Если название начинается не с буквы русского алфавита, ставить точку. Однако, данный запрос выдает не только буквы алфавита и "точку" вместо всего, что не является символом русского алфавита, но символы '«' и 'І', возможно в будущем могут цепляться и еще какие-то символы не относящиеся к русскому алфавиту.

Текущий результат запроса

Код

ПМНБГДРЛТИ.УВСКЯЗАОЦЖХШЭЧФЕЩ«ЮЙІ


Пока так и не понял почему это происходит, может есть какие особенности в регулярных выражениях?? (скорее всего, возможно связь с кодировками и т.п.)

кодировка в базе - utf8

"Іміджмейкер із Москви". Название на символ "I".

По символу "«" - тоже есть название начинающееся с данного символа. Но оно должно заменятся на ".", но почему это не происходит??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ivg
Дата 11.8.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: нет
Всего: 81



Цитата(Bulat @  11.8.2008,  17:07 Найти цитируемый пост)
Пока так и не понял почему это происходит, может есть какие особенности в регулярных выражениях?? (скорее всего, возможно связь с кодировками и т.п.)

По моему REGEXP в MySQL не умеет работать с мультибайтовыми кодировками. Можно попробовать что то типа такого:
Код

SELECT
    GROUP_CONCAT(
        DISTINCT
            IF(CONVERT(s_name USING cp1251) REGEXP CONVERT('^[ёа-я]' USING cp1251),
                UPPER(SUBSTR(s_name,1,1)),
                '.'
            )
    SEPARATOR '')
FROM arts

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0937 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.