2009-07-31 27 views
5
SELECT * 
FROM `thread` 
WHERE forumid NOT IN (1,2,3) AND IF(LEFT(title, 1) = '#', 1, 0) 
ORDER BY title ASC 

Tengo esta consulta que seleccionará algo si comienza con un #. Lo que quiero hacer es si # se da como un valor que buscará números y caracteres especiales. O cualquier cosa que no sea una letra normal.MySQL - Si comienza con un número o carácter especial

¿Cómo podría hacer esto?

Respuesta

17

Si desea seleccionar todas las filas cuyos "título" no comienza con una carta, utilice REGEXP:

SELECT * 
    FROM thread 
    WHERE forumid NOT IN (1,2,3) 
    AND title NOT REGEXP '^[[:alpha:]]' 
ORDER BY title ASC 
  • NO significa "no" (obviamente;))
  • ^ medios "comienza con"
  • [[: alpha:]] significa "caracteres alfabéticos solamente"

Conozca más acerca de REGEXP in MySQL's manual.

+1

url de trabajo para regexp manual es https://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp – dsomnus

1

Es posible que usted puede tratar de proyectarlo como un char:

CAST('#' AS CHAR) 

pero no sé si esto funcionará para el octothorpe (también conocido como símbolo de la libra :)) porque es el símbolo para el inicio de una comentar en MySQL

+0

Soy un novato de MySQL real. Esa cláusula NOT IN está vacía sobre mi cabeza solo para ponerla en contexto. ¿Podría explicar un poco más, por favor :) –

+0

simplemente reemplace 'Y SI (IZQUIERDA (título, 1) = '#', 1, 0)' con 'Y SI (IZQUIERDA (título, 1) = CAST ('# 'AS CHAR), 1, 0) ', pero como he dicho, no sé si funcionará con octothorpes – Jason

+0

No funciona. No devuelve nada. –

1
SELECT t.* 
    FROM `thread` t 
    WHERE t.forumid NOT IN (1,2,3) 
    AND INSTR(t.title, '#') = 0 
ORDER BY t.title 

uso del INSTR para obtener la posición de una cadena dada - si quieres cuando una cadena comienza, la verificación de 0 (posiblemente 1 - la documentación no indica si es cero o uno basado) .

Cuestiones relacionadas