MySQL - если он начинается с цифры или специального символа - PullRequest
5 голосов
/ 31 июля 2009
SELECT * 
FROM `thread` 
WHERE forumid NOT IN (1,2,3) AND IF( LEFT( title, 1) = '#', 1, 0)
ORDER BY title ASC

У меня есть этот запрос, который выберет что-то, если он начинается с #. Что я хочу сделать, так это, если # дано как значение, оно будет искать цифры и специальные символы. Или что-нибудь, что не является нормальной буквой.

Как бы я это сделал?

Ответы [ 3 ]

17 голосов
/ 31 июля 2009

Если вы хотите выбрать все строки, чей «заголовок» не начинается с буквы, используйте REGEXP:

  SELECT * 
    FROM thread 
   WHERE forumid NOT IN (1,2,3)
     AND title NOT REGEXP '^[[:alpha:]]'
ORDER BY title ASC
  • НЕ означает «не» (очевидно;))
  • ^ означает «начинается с»
  • [[: alpha:]] означает «только буквенные символы»

Узнайте больше о REGEXP в руководстве MySQL .

1 голос
/ 31 июля 2009
  SELECT t.* 
    FROM `thread` t
   WHERE t.forumid NOT IN (1,2,3) 
     AND INSTR(t.title, '#') = 0
ORDER BY t.title

Используйте INSTR , чтобы получить позицию заданной строки - если вы хотите, чтобы строка начиналась, проверьте 0 (возможно, 1 - в документации не указано, основано ли оно на нуле или на основе одного).

1 голос
/ 31 июля 2009

МОЖНО, вы можете попробовать разыграть его как чар:

CAST('#' AS CHAR)

но я не знаю, сработает ли это для восьмигранника (он же символ фунта :)), потому что это символ начала комментария в MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...