2016-01-03 3 views
1

Я пытаюсь построить SQL заявление, чтобы получить имена пользователей в следующем порядкеSQL регулярное выражение работает неправильно

  • сначала возвращают имена, которые начинаются с арабской буквы, то имена, которые начинаются с Английские буквы, затем имена, начинающиеся со специальных символов.
  • затем сортировать каждую из трех групп в порядке возрастания.

Это мой код:

SELECT `name` FROM `user` 
order by case when substring(name,1,1) like 'N[أ-ي]' then 1 
       when substring(name,1,1) like '[a-zA-Z]' then 2 
       else 3 
       end 
     ,name 

Проблема заключается в том, что в случае часть всегда возвращает 3, и поэтому оператор сортирует имена в порядке по умолчанию (специальные символы, а затем английские буквы, то арабский буквы). В чем проблема в моем запросе?

+0

@Cyval Спасибо за ваш correction.But даже когда я изменил параметр в функция все еще не работает. –

+2

nop, пример этой статьи говорит, что начальный индекс подстроки начинается с 1 ... https://msdn.microsoft.com/hu-hu/library/ms187748.aspx, и это тоже: http://dev.mysql.com/ doc/refman/5.7/ru/string-functions.html # function_substring – golddragon007

+0

@Cyval. , , Вы просто ошибаетесь. –

ответ

3

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

SELECT `name` FROM `user` 
order by case when substring(name,1,1) regexp 'N[أ-ي]' then 1 
       when substring(name,1,1) regexp '[a-zA-Z]' then 2 
       else 3 
       end 
     ,name 

Ссылка: MySQL CASE statement and REGEXP

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