Estoy aprendiendo MySQL ahora. Necesito su ayuda en la comprensión de la diferencia entre estas consultas:diferencia entre operador like y regex
select id from tab where id like '000';
select id from tab where id regex '000';
Estoy aprendiendo MySQL ahora. Necesito su ayuda en la comprensión de la diferencia entre estas consultas:diferencia entre operador like y regex
select id from tab where id like '000';
select id from tab where id regex '000';
Su primera consulta utiliza like
operador, pero no utiliza ningún comodines. Por lo que es el equivalente a:
select id from tab where id = '000';
que enumera sólo aquellos id
's donde id
es 000
.
La segunda consulta utiliza regex
operador y que enumera las filas donde id
tiene 000
cualquier lugar en ella.
Ejemplo: Se va a enumerar estas id
's: 1000
, 2000
, 000
, 0001
Para hacer su primera consulta se comportan igual que el segundo tendrá que utilizar comodín %
que coincide con cero o más caracteres:
select id from tab where id like '%000%';
para hacer su segunda consulta se comporta como el puño que tendrá que utilizar el ancla de partida (^
) y el ancla de extremo ($
):
select id from tab where id regex '^000$';
Sólo en caso de que quería decir la primera instrucción a ser:
select id from tab where id like '%000%';
Eso significa: nada (o nada), seguidos de '000', seguido de nada (o nada) .
Esto es exactamente lo que id regex '000'
hace.
Básicamente, LIKE
hace coincidencias de comodines muy simples, y REGEX
es capaz de conseguir coincidencias de comodines muy complicadas.
De hecho, las expresiones regulares (REGEX
) son tan capaces que son [1] un estudio completo en sí mismas [2] una manera fácil de introducir errores muy sutiles. Que te diviertas.
El operador como permite especificar comodines utilizando el operador %.
Si, por ejemplo, tiene que especificar todas las palabras que comienzan con el carácter un, puede hacerlo utilizando el valor "a%". También podría especificar palabras terminando con una cadena de caracteres. P.ej. las palabras que terminan con ing se pueden especificar mediante "% ing"
También podría haber parámetros especificando columnas que contienen valores que contienen una determinada cadena. P.ej.las palabras que contienen los caracteres peces se pueden especificar utilizando los parámetros como "% peces%"
Regexp (no creo que hay un operador de expresiones regulares), por otro lado permite especificar expresiones regulares al comparar valores en una columna con un parámetro. Por ejemplo, si necesita recuperar todos los registros que coincidan con un número de teléfono en el formato 555-666-7777, puede usar el parámetro "[[: digit:]] {3} \ - [[: digit:]] { 3} \ - [[: digit:]] {4} "
Por ej. SELECT * FROM agenda DONDE REGEXP teléfono "[[: digit:]] {3} \ - [[: digit:]] {3} \ - [[: digit:]] {4}"
favor vea http://dev.mysql.com/doc/refman/5.1/en/regexp.html para más información sobre el operador REGEXP.
Para agregar a esto: * habría * diferencias si tus consultas fueran '... como '000%'' y ''... como' 000_'' y' ... regex '000 [[: alnum:]] + ''y ... entenderás la idea;) – FrustratedWithFormsDesigner