• Domingo 22 de Diciembre de 2024, 12:45

Autor Tema:  Problema En Clausula Where  (Leído 2702 veces)

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Problema En Clausula Where
« en: Domingo 15 de Abril de 2007, 16:42 »
0
Hola gente sabia del foro.

Tengo un problemita, digamos que yo tengo la siguiente tabla:
 
Al realizar la consulta:
Código: Text
  1. Select * FROM test where campoint='h9';
  2.  
por ejemplo me arroja el siguiente resultado:

Yo supongo que al tratarse de un campo int, se realiza algún tipo de casting o algo por el estilo, resultando ser 'h9' igual a 0, ya que al cambiar el valor a '9h' me devuelve el registro 8. Por resultar '9h' igual a 9 .-

Yo quisiera lograr que en ambos casos la consulta no me devuelva ningún registro.-

Se agradece cualquier sugerencia.-

Nos estamos leyendo :beer:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

LeGatoRojo

  • Miembro HIPER activo
  • ****
  • Mensajes: 552
  • Nacionalidad: mx
    • Ver Perfil
    • LeGatoRojo
Re: Problema En Clausula Where
« Respuesta #1 en: Lunes 23 de Abril de 2007, 23:13 »
0
yo diria que en caso de tratarse de un dato int, deberias omitir los apostrofes, para que lo tome en valor númerico.
Un día desperte y en lugar de dientes tenía colmillos, en lugar de manos, tenía garras; pero lo más impactante fue el color escarlata de mi pelaje.

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Problema En Clausula Where
« Respuesta #2 en: Lunes 23 de Abril de 2007, 23:53 »
0
Gracias por contestar.-

De la forma que me sugerís me daría un error por considerarse h9 como el nombre de una columna (Inexistente).-

El problema radica en que es el usuario quien ingresa estos valores (Por lo que puede ingresar cualquier cosa) y por otro motivo que no viene al tema quiero hacerlo de esta manera.-

Un saludo :beer:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
Re: Problema En Clausula Where
« Respuesta #3 en: Jueves 26 de Abril de 2007, 16:11 »
0
Angel_K_ido, me llamó la atención lo que mecionás así que me puse a provar. Al parecer MySQL convierte el texto en nada (o en un 0 silo prefieres).

Si haces una suma por ejemplo:
Citar
SELECT 'hola'+10;
El resultado será 10

Si comparás con un string, el cual no representa un número, te dará siempre verdadero. Ahora bien, si comparas con un string que represente un número, hará la búsqueda normalmente:

Ej:
Citar
Select * FROM test where campoint='9';
Dará como resultado, el registro 8;

Si pruebas otras convinaciones (por ejemplo, comparando con 2e 2o se comprotará erraticamente.


Por lo cual, mis consejo, es para que puedas hacer la consulta que estás intentado, uses:
select * from test where CAST(campoint AS CHAR) = '9h';
No es lo mejor para tablas grandes, ya que salteará el índice, al tener que hacer un casting campo por campo.


Espero que te sirva.
Altareum.
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Problema En Clausula Where
« Respuesta #4 en: Jueves 26 de Abril de 2007, 17:00 »
0
Citar
Espero que te sirva.
Altareum.
Claro que sí!!! Como siempre...
Muchas gracias Altareum.

Otra preguntita ya que estamos...
A que te referís con que:
Citar
No es lo mejor para tablas grandes, ya que salteará el índice, al tener que hacer un casting campo por campo.
No termino de entenderlo porque no estoy accediendo a través del índice  :think: .-
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
Re: Problema En Clausula Where
« Respuesta #5 en: Viernes 27 de Abril de 2007, 15:45 »
0
Código: Text
  1. No termino de entenderlo porque no estoy accediendo a través del índice think.gif .-
  2.  

Entonces no te preocupes...

Intento explicarlo igualmente, de forma ràpida. En SQL cuando realizas conversiones en campos perteneciéntes al índice ( como una suma ), ya sea una función, una operación, etc... no utilizará el índice para realizar la búsqueda debido a que tiene que realizar la comparación campo por campo.

Por ejemplo (siendo que el campo fecha, sea parte del índice):
SELECT fecha WHERE DATE_ADD(fecha,INTERVAL 1 DAY) = CURDATE()

No utilizará el índice, para buscar los campos correspondientes, ya que para ello, tiene que convertir cada valor del campo, para saber si es igual a CURDATE().

Mientras que:
SELECT fecha WHERE fecha = DATE_SUB(CURDATE(),INTERVAL 1 DAY)

De esta forma si utilizará el índice, ya que buscará todas las fechas que sean iguales a hoy menos un día.
Por lo cual, el primer método es muchísimo más lento que el segundo...


Altareum.
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Problema En Clausula Where
« Respuesta #6 en: Viernes 27 de Abril de 2007, 16:01 »
0
...Académico  :smartass:

Es lo que yo pensaba...

Muchas gracias Altareum :beer:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.