Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

[SOLUCIONADO] quitar ceros a la izquierda al consultar campo character varying

Estas en el tema de quitar ceros a la izquierda al consultar campo character varying en el foro de PostgreSQL en Foros del Web. buenas tardes amigos a ver si me pueden ayudar, la duda no se si es con php o con el postgres, pero el caso es ...
  #1 (permalink)  
Antiguo 21/09/2016, 12:20
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta quitar ceros a la izquierda al consultar campo character varying

buenas tardes amigos a ver si me pueden ayudar, la duda no se si es con php o con el postgres, pero el caso es que en la tabla personal, hay que consultarla mediante el numero de cedula de la persona cosa que al escribir en el input el numero se realice la consulta y busque los datos, pero hay numeros de cedula que tienen ceros a la izquierda y otros que no los tienen entonces a la hora de buscar por cedula los campos que poseen los ceros dan error si no se colocan, por ejemplo, mi numero es "12345678" pero en la tabla esta registrado asi "00012345678" y me piden que a la hora de hacer la consulta no alla que poner los ceros adelante ya que no se sabe cuando hay que colocarlos, necesito saber como se puede hacer que sin colocar los ceros alante del numero realice la consulta correctamente, muchas gracias de antemano
  #2 (permalink)  
Antiguo 21/09/2016, 14:57
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Edito: Eso sucede con todos los casos u otros sí otros no?

Última edición por alvaro_trewhela; 21/09/2016 a las 15:35
  #3 (permalink)  
Antiguo 21/09/2016, 17:44
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Cita:
Iniciado por jecavi_20 Ver Mensaje
buenas tardes amigos a ver si me pueden ayudar, la duda no se si es con php o con el postgres, pero el caso es que en la tabla personal, hay que consultarla mediante el numero de cedula de la persona cosa que al escribir en el input el numero se realice la consulta y busque los datos, pero hay numeros de cedula que tienen ceros a la izquierda y otros que no los tienen entonces a la hora de buscar por cedula los campos que poseen los ceros dan error si no se colocan, por ejemplo, mi numero es "12345678" pero en la tabla esta registrado asi "00012345678" y me piden que a la hora de hacer la consulta no alla que poner los ceros adelante ya que no se sabe cuando hay que colocarlos, necesito saber como se puede hacer que sin colocar los ceros alante del numero realice la consulta correctamente, muchas gracias de antemano
Utiliza la función str_pad de PHP. Esa función te permite rellenar valores a la izquierda o derecha (en tu caso de "0").

Saludos.
  #4 (permalink)  
Antiguo 21/09/2016, 18:18
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Respuesta: quitar ceros a la izquierda al consultar campo character varying

muchas gracias por responder, y si es asi "alvaro_trewhela" con unos si y con otros no, porque unos si estan registrados con cero por delante y otros no, y bueno si uso la funcion función str_pad de PHP que dice "oggy_15_3" eso rellenaria el input siempre y de ser ese el caso entonces los numeros de cedulas que no llevan los ceros al frente darian error al momento de consultar, ya que el campo de la tabla es character varying, tendria que ser algo que se tome segun sea el caso, ocea que si lleva los ceros los agreguey si no los lleva entonces no lo entonces no los agregue y no logro ver una solucion y necesito ayuda porque en el trabajo ya me estan apurando amigos ayudenme
  #5 (permalink)  
Antiguo 21/09/2016, 19:40
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: quitar ceros a la izquierda al consultar campo character varying

En ese caso te recomiendo que lo pienses nuevamente y arregles el problema de fondo, a que me refiero, puedes tener dos o más registros diferentes pero iguales al mismo tiempo, ejemplo

123
0123
00123
000123

etc...

No obtienes nada con cualquier función "arregla strings" si tienes este dilema. Puedes dar más información sobre los detalles de esto.

Lo que podríamos hacer es quitar con un script php todos los ceros iniciales de los registros, es una posible solución.

Quedo atento.


Última edición por alvaro_trewhela; 21/09/2016 a las 19:52
  #6 (permalink)  
Antiguo 22/09/2016, 07:23
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Pero es que no puedo modificar los registros de la base de datos tengo que consultarlos asi mismo como estan pero resolviendo el detalle de que uno escriba el numero de cedula normal el traiga los datos, necesitaria algo asi como una funcion que compare los numeros y obvie los ceros al frente o que no tome los ceros al frente algo asi, no se de verdad estoy loco ya con esto, tal vez sea algo sencillo pero ni idea de verdad
  #7 (permalink)  
Antiguo 22/09/2016, 13:03
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Esto será difícil conseguirlo con PHP, muevo tu tema a MySQL, tal vez te sugieran una consulta apropiada.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 22/09/2016, 20:26
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: quitar ceros a la izquierda al consultar campo character varying

bueno espero me ayuden aqui por favor
  #9 (permalink)  
Antiguo 23/09/2016, 05:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Cita:
necesito saber como se puede hacer que sin colocar los ceros alante del numero realice la consulta correctamente
En ese contexto, no hay una forma de realizar una consulta con precisión, es decir, una consulta EXACTA, que te devuelva siempre un sólo y UNICO registro. El mismo planteo te da la pauta de que cualquier consulta, siendo ingresado solo una PARTE del dato, unicamente puede resolverse por aproximacion.
Esto implica que la query debe hacerse sobre un campo o columna de tipo caracter (CHAR o VARCHAR), y usando LIKE o INSTR(), por ejemplo.

Pero mas allá de eso, hay un detalle a tener en cuenta, y esto es a nivel funcional: Si el dato en cuestión corresponde a los números de documento de un mismo país, entonces no importa si en el formulario se ingresa o no con ceros, porque OBLIGATORIAMENTE tienes que completarlos con ceros. Esto es debido a que la longitud del dato no lo regulas tu, sino el organismo de emisión de los mismos, y en esos organismos se guardan también con TODOS sus ceros, mas allá de que sean números. Los sistemas que emiten los documentos siempre lo harán agregando ceros, porque es el patrón de datos el que deben respetar.
¿Se entiende?
Así, si el patrón de datos exige representar un set de nueve caracteres, y el numero fuese el 1.234, por ejemplo, de todos modos se debe almacenar y buscar como "000001234".

¿Se comprende la idea?

En cualquier caso, tu sistema debería estar preparado para buscar cualquiera de las dos formas: Por parte del numero o por el numero completo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 23/09/2016, 06:46
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: quitar ceros a la izquierda al consultar campo character varying

hola "gnzsoloyo" gracias por responder y bueno si tu tienes razon claro, pero lo que pasa tambien es que no todos los registros tienen esos ceros para completar el campo unos is los tienen y otros no, entonces suponiendo que el numero a buscar sea 1234 y entonces uno por regla escribe 0001234, dice que el registro no existe, entonces no es factible de verdad porque habira que intentar varias veces ya que hay unos con 2 cero y otros con 3 y otros que nisiquiera los tienen, entonces, lo que quieren hacer es que se consulte sin tener que intentar a adivinar y no se como de verdad no logro ver una solucion.

el tema lo habia colocado en la seccion de PHP para saber si habia una funcion que compare los numeros aunquesea y haga la consulta independientemente de colocar lo ceros.
  #11 (permalink)  
Antiguo 23/09/2016, 17:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: quitar ceros a la izquierda al consultar campo character varying

YA te respondí cómo,al decir:
Cita:
Esto implica que la query debe hacerse sobre un campo o columna de tipo caracter (CHAR o VARCHAR), y usando LIKE o INSTR(), por ejemplo.
¿Sabes a qué me refiero?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 24/09/2016, 13:24
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Respuesta: quitar ceros a la izquierda al consultar campo character varying

bueno el LIKE lo he usado pero no funciona por ejemplo en, where cedper LIKE '1234567', y no consigue la cedula si contiene los ceros claro y el INSTR() no se como usarlo, te dejo uno de los codigos que de consulta:
Código SQL:
Ver original
  1. SELECT a.codper, a.nomper, a.apeper, a.fecingper,a.cedper, c.descar
  2.                 FROM sno_personal a, sno_personalnomina b, sno_cargo c  
  3.                 WHERE a.cedper LIKE '1234567' AND a.codper=b.codper AND b.codnom=c.codnom AND b.codcar=c.codcar LIMIT'1'
[/CODE]

y otra pregunta mas, suponiendo que se quieran eliminar esos ceros a la izquierda de ese campo en todas las filas como se haria, hay funcion para eso un update o algo que yo ponga que quiera elimnar los ceros a la izquierda y se borren de todas las filas.

Última edición por gnzsoloyo; 24/09/2016 a las 16:35
  #13 (permalink)  
Antiguo 24/09/2016, 13:27
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Para que funcione el LIKE necesitas usar el comodín %, ejemplo:

Código MySQL:
Ver original
  1. WHERE a.cedper LIKE '%1234567'
__________________
- León, Guanajuato
- GV-Foto
  #14 (permalink)  
Antiguo 24/09/2016, 16:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Como ya te aclaró Tribi, el tema es que si usas el LIKE contra una cadena de texto sin usar los comodines, es exactamente lo mismo que poner un "=".
Para buscar patrones, tienes que usar comodines... algo que puedes encontrar claramente explicado en cualquier tutorial básico.
Eso si: Ten en cuenta que poner los comodines en ambos lados de la cadena obligará a MySQL a leer absolutamente TODA la tabla. No podrás optimizar eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 25/09/2016, 14:39
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Respuesta: quitar ceros a la izquierda al consultar campo character varying

a ok ya lo utilice y si funciona, no habia captado y como soy novato mas todavia, muchas gracias de verdad, y la ultima pregunta hay alguna sentencia que ejecute que borre los ceros a la izquierda de todas las filas de esa columna?, como update o algo asi?, ya que estoy pensando en migrar las tablas a una base de datos diferente y asi poder manipularla a mi antojo ya que en la base de datos que se encuentra actualmente no la puedo tocar, y asi seria mas facil de optimizar el sistema si se eliminan esos ceros y listo.
  #16 (permalink)  
Antiguo 25/09/2016, 16:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Si el campo está definido como VARCHAR, simplemente cambialo por INT y los ceros desaparecerán solos, ya que no existen los ceros a la izquierda, como recordaras...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 25/09/2016, 20:13
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Respuesta: quitar ceros a la izquierda al consultar campo character varying

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si el campo está definido como VARCHAR, simplemente cambialo por INT y los ceros desaparecerán solos, ya que no existen los ceros a la izquierda, csabrás otrcordaras...
Esta en postgresql que es charácter varying, yo cambie el campo a interger y me borra todos los números y me deja un solo numero nada mas, no me deja, utilizo el pgadmin III, sabras como podría hacer en este caso?
  #18 (permalink)  
Antiguo 26/09/2016, 09:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Muevo al foro de PosgreSQL
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 26/09/2016, 17:16
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Bueno espero que me ayuden en este foro solo me falta eso para terminar el problema
  #20 (permalink)  
Antiguo 27/09/2016, 08:02
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: quitar ceros a la izquierda al consultar campo character varying

Jecavi.

Con respecto a la nueva tabla, debes crearla igual pero con el campo como integer.

Una vez tengas todo listo, puedes hacer lo siguiente:

Código SQL:
Ver original
  1. INSERT INTO tabla_nueva(campo_char,campo2,campo3,campo_n) SELECT to_number(campo_char,'999999999999999'),campo2,campo3,campo_n FROM tabla_vieja;

Esto castea los valores de texto a numerico, eliminando los ceros a la izquierda.

Con respecto a tu problema anterior, sin necesidad de modificar nada, se podría trabar en las consultas de una forma similar.
Por ejemplo:
Código SQL:
Ver original
  1. SELECT *FROM tabla WHERE TO_NUMBER(campo_char,'9999999999999999') = valor_numerico;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #21 (permalink)  
Antiguo 03/10/2016, 09:26
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: quitar ceros a la izquierda al consultar campo character varying

buenos tardes, disculpen que tarde tanto en responder es que tenia problemas con el internet, el problema de la consulta lo deje en que busque los datos por el metodo del like ya que no voy a migrar las tablas. Muchas gracias a todos por tanta ayuda de verdad

Etiquetas: campo, consultar, izquierda, php, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:41.