MySQL: si comienza con un número o un carácter especial
Pregunta
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 que si # se da como valor, buscará números y caracteres especiales. O cualquier cosa que no sea una letra normal.
¿Cómo haría esto?
Solución
Si desea seleccionar todas las filas cuyo " título " no comienza con una letra, use REGEXP:
SELECT *
FROM thread
WHERE forumid NOT IN (1,2,3)
AND title NOT REGEXP '^[[:alpha:]]'
ORDER BY title ASC
- NO significa " no " (obviamente;))
- ^ significa que " comienza con "
- [[: alpha:]] significa '' solo caracteres alfabéticos ''
Obtenga más información sobre REGEXP en el manual de MySQL .
Otros consejos
es POSIBLE, puedes intentar lanzarlo como un char:
CAST('#' AS CHAR)
pero no sé si esto funcionará para el octothorpe (también conocido como símbolo de libra :)) porque ese es el símbolo para comenzar un comentario en MySQL
SELECT t.*
FROM `thread` t
WHERE t.forumid NOT IN (1,2,3)
AND INSTR(t.title, '#') = 0
ORDER BY t.title
Utilice el INSTR para obtener la posición de una cadena dada: si lo desea cuando se inicia una cadena, verifique 0 (posiblemente 1; la documentación no indica si es cero o uno basado).