Pregunta

Entonces,

SELECT * FROM table WHERE col LIKE '%'

devolverá todo. ¿Hay un comodín para la consulta

SELECT * FROM table WHERE col = '*'

Claramente, * no funciona, solo lo puse allí para indicar dónde me gustaría un comodín. La columna de la que estoy seleccionando contiene un número entero entre 1 y 12, y quiero poder seleccionar todos los registros con un número en particular o todos los registros con un comodín.

Gracias,

¿Fue útil?

Solución

LIKE es básicamente lo mismo que =, excepto que LIKE te permite usar comodines.

Estas dos consultas devolverán los mismos resultados:

SELECT * FROM table WHERE col LIKE 'xyz';
SELECT * FROM table WHERE col='xyz';

Sin un '%' en la consulta LIKE, en realidad es lo mismo que '='.

Si está haciendo una selección en una columna de enteros, debería considerar el uso de los operadores IN () o ENTRE. Parece que tiene dos condiciones separadas que deben manejarse en su código, sin embargo, en lugar de en la consulta, ya que sus condiciones dictan que necesita al menos dos tipos diferentes de consultas.

Editar: Debería aclarar que LIKE y = son similares solo en el uso normal, en comparación con cadenas de caracteres. Debe consultar el MySQL Manual para obtener información específica cómo funciona, ya que hay situaciones en las que no es lo mismo (como los conjuntos de idiomas).

Otros consejos

Si desea seleccionar todo, ¿por qué adjunta la cláusula WHERE? Simplemente déjelo fuera condicional en lugar de ponerle un comodín.

La razón para usar LIKE es porque = no ofrece soporte de comodín. De lo contrario no habría ninguna razón para que LIKE

SELECT * FROM table WHERE col RLIKE '.*'

es decir, La expresión regular LIKE.

La respuesta de

zombat es genial, pero solo noté en su respuesta que estás seleccionando enteros. Mencionó EN () y ENTRE (). Aquí hay ejemplos que usan esas sintaxis, así como algunas otras opciones que tiene para un campo entero.

SELECT * FROM table WHERE col = 1;
SELECT * FROM table WHERE col BETWEEN 1 AND 12;
SELECT * FROM table WHERE col BETWEEN 6 AND 12;
SELECT * FROM table WHERE col <= 6;
SELECT * FROM table WHERE col < 6;
SELECT * FROM table WHERE col >= 6;
SELECT * FROM table WHERE col > 6;
SELECT * FROM table WHERE col <> 6;
SELECT * FROM table WHERE col IN (1,2,5,6,10);
SELECT * FROM table WHERE col NOT IN (1,2,5,6,10);

Suponiendo que su consulta esté basada en parámetros, probablemente sea apropiado un enunciado de caso

select * from mytable
where col like case when @myvariable is null then % else myvariable end

Donde @myvariable es nulo si no quieres un valor, de lo contrario, usaría el valor entero que pasas.

Me he encontrado con un caso así al crear un procedimiento almacenado para un informe La siguiente es mi solución, espero que esto sea lo que tenías en mente :)

set @p = "ALL";

Consulta:

select * from fact_orders
where
dim_country_id = if(@p is null or @p="ALL", dim_country_id, @p)
limit 10
;

Si sus valores están en el rango (1,12) entonces:

selecciona * de la tabla donde col > = 5 y col < = 5; // esto es igual a col = 5

seleccione * de la tabla donde col > = 0 y col < = 12; // esto es igual a col = cualquier valor

La misma línea puede producir ambos efectos eligiendo los 2 parámetros adecuadamente. Me enfrenté a un problema similar cuando necesitaba una sola declaración preparada que debería funcionar de 2 maneras diferentes, ya sea comprobando un valor particular en una columna o ignorando esa columna por completo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top