Extraer texto de campo |
Responder | Página <12 |
Autor | |||||||||||||||
VIMIPAS
Colaborador Unido: 06/Enero/2006 Localización: ESPAÑA Estado: Sin conexión Puntos: 5462 |
Enviado: 18/Septiembre/2019 a las 23:13 | ||||||||||||||
Hola a todos buenas noches. Para el caso que nos ocupa, a mi entender hay 3 grupos de registros distintos. El 1 abarca a los que empiezan por "MANDATORY" El 2 abarca a los que empiezan por "OPTIONAL" y que contienen "G-" EL 3 abarca a los que empiezan por "OPTIONAL" y que contienen "E-" Bajo esa premisa, por favor indicadme si no estoy en lo correcto, tan solo he creado una tabla con tres registros, y uno mas del grupo que he denominado 3, en total 4 registros para la muestra. Este último lo he creado porque el antepenúltimo, el que contiene "GAGE-13581803", es el que nos da la pista (al menos a mi) de que cuando exista "GAGE-......", tan solo precisamos de los dos primeros caracteres que haya después del guión. Aqui dejo la tabla creada:
Aquí dejo la consulta creada para resolverlo. Lo resuelvo a base Replace, con dos expresiones y para el caso de los registros del grupo 3, con un MID:
Y aquí dejo la SQL correspondiente: SELECT IIf(Mid([DESCRIPCIONES],1,3)="MAN",Replace([DESCRIPCIONES],"MANDATORY GAGE ",""),IIf(InStr([DESCRIPCIONES],"G-")>0,Replace([DESCRIPCIONES],"OPTIONAL INSPECTION GAGE ",""),Replace([DESCRIPCIONES],"OPTIONAL INSPECTION ",""))) AS Expr1, IIf(InStr([DESCRIPCIONES],"IS")>0,Replace([EXPR1]," IS REQUIRED PER PLANT'S SPECIFIC WORK INSTRUCTIONS",""),IIf(InStr([DESCRIPCIONES],"G-")>0,Replace([EXPR1]," PER PLANT'S SPECIFIC WORK INSTRUCTIONS",""),Mid([EXPR1],1,7))) AS Expr2 FROM ERIKGAMER; Creo que los datos son correctos, si fuera el caso y tengo algún error, pondría todos los registros para repasarlo al completo. Saludos. Edito para añadir lo siguiente: He creado los 4 registros a mano. Quiero decir que no he sabido copiar los que pone Erick Gamer. Sin embargo ahora cuando yo los he puesto si que puedo copiarlos, es decir, al copiar "literalmente" los registros de la tabla o la consulta, y pegarlos aquí en la página de respuesta, SI que se pueden copiar. Lo digo por si Erick Gamer fuera tan amable de pegarlos de la misma forma aquí, por si hubiera que copiarlos.... Muchas gracias.
Editado por VIMIPAS - 18/Septiembre/2019 a las 23:21 |
|||||||||||||||
Gracias
|
|||||||||||||||
VIMIPAS
Colaborador Unido: 06/Enero/2006 Localización: ESPAÑA Estado: Sin conexión Puntos: 5462 |
Enviado: 18/Septiembre/2019 a las 23:47 | ||||||||||||||
Buenas noches de nuevo.
Al autorepasarme, observo que he usado muchas cosas que no son necesarias:
Y la Sql: SELECT IIf(InStr([DESCRIPCIONES],"G-")>0,Mid([DESCRIPCIONES],InStr([DESCRIPCIONES],"G-")),Mid([DESCRIPCIONES],InStr([DESCRIPCIONES],"E-")-3)) AS Expr1, IIf(Mid([EXPR1],1,2)="G-",Mid([EXPR1],1,InStr([EXPR1]," ")-1),Mid([EXPR1],1,7)) AS EXTRAER FROM ERIKGAMER; Hay que ver la que lío yo mismo conmigo mismo a veces. Saludos y perdón, era mas simple todavía.
|
|||||||||||||||
Gracias
|
|||||||||||||||
Erick Gamer
Asiduo Unido: 08/Mayo/2016 Localización: Mexico Estado: Sin conexión Puntos: 387 |
Enviado: 19/Septiembre/2019 a las 05:26 | ||||||||||||||
Ejemplo de Mihura funcionando, corregi el select en el RecordSet al parecer los nulos me estaban dando problemas así que meti un where y ya esta.
Aqui el codigo con el ajuste:
He visto las aportaciones de Vimipas, las he probado y a simple vista hacen lo que necesitan, mañana revisare con mas calma y les comento. De momento saludos de corazón y agradecido con todos. Buenas noches porque creo muchos en España ya están noqueados por Morfeo. Erick Gamer
|
|||||||||||||||
Aprendiz de todos, maestro de nadie.
|
|||||||||||||||
VIMIPAS
Colaborador Unido: 06/Enero/2006 Localización: ESPAÑA Estado: Sin conexión Puntos: 5462 |
Enviado: 19/Septiembre/2019 a las 10:21 | ||||||||||||||
Pues muy buenos días. Efectivamente Morfeo ataca a ciertas horas..... pero también refresca la cabeza y sus neuronas.... claro que para llegar al final que a continuación propongo, me ha sido preciso andar antes por los distintos ejemplos que puse. Aquí lo dejo resuelto con una sola expresión, la que he llamado única y exclusivamente "Extraer":
EXTRAER: SiInm(EnCad([DESCRIPCIONES];"G-")>0 Y EnCad([DESCRIPCIONES];" IS")>0;Medio([DESCRIPCIONES];EnCad([DESCRIPCIONES];"G-");EnCad([DESCRIPCIONES];" IS")-EnCad([DESCRIPCIONES];"G-"));SiInm(EnCad([DESCRIPCIONES];"G-")>0 Y EnCad([DESCRIPCIONES];" PER")>0;Medio([DESCRIPCIONES];EnCad([DESCRIPCIONES];"G-");EnCad([DESCRIPCIONES];" PER")-EnCad([DESCRIPCIONES];"G-"));Medio([DESCRIPCIONES];EnCad([DESCRIPCIONES];"E-")-3;7))) Lo mas complicado, con tanto paréntesis, es acertar, pero si al final dices voy a sacarlo si o si, se consigue. El método anterior lo que hace es usar las dos expresiones para no recurrir a tanto paréntesis. Pero quiero explicarlo paso a paso, pues me ha costado lo mío y así lo dejo aquí reflejado para que cualquiera (incluido yo mismo el día de mañana) lo pueda entender. Vamos pues a explicarlo en cristiano. Esta es la primera pregunta: SiInm(EnCad([DESCRIPCIONES];"G-")>0 Y EnCad([DESCRIPCIONES];" IS")>0... quiere decir que si hay un registro que contenga "G-" y también " IS" ese pertenece a un grupo..... ¿Cómo tratamos ese grupo?: Así: Medio([DESCRIPCIONES];EnCad([DESCRIPCIONES];"G-");EnCad([DESCRIPCIONES];" IS")-EnCad([DESCRIPCIONES];"G-")).... que quiere decir que del campo Descripciones usando Mid, quiero sacar desde "G-" incluido hasta donde está el " IS". Como resulta que la parte primera de la función Mid nos indica donde empezar a confeccionar la cadena que buscamos y la segunda parte de un Mid nos indica cuantos caracteres queremos recoger a partir de la parte primera, es por lo que resto el valor que sale con Encad de " IS" (que es el valor mayor para este caso) del valor que sale con Encad de "G-". Resuelto. Esta es la segunda pregunta: SiInm(EnCad([DESCRIPCIONES];"G-")>0 Y EnCad([DESCRIPCIONES];" PER")>0;Medio([DESCRIPCIONES];EnCad([DESCRIPCIONES];"G-");EnCad([DESCRIPCIONES];" PER")-EnCad([DESCRIPCIONES];"G-")).... exactamente lo mismo que en la anterior, pero en vez de usar " IS" que no existe, usamos el " PER" que si existe. Y queda resuelto de la misma manera, el segundo grupo de registros. Y la tercera pregunta no la hago, sino que es la condición falsa de la segunda pregunta: ;Medio([DESCRIPCIONES];EnCad([DESCRIPCIONES];"E-")-3;7))). El 7 es el número de caracteres que deberá contener esta cadena que buscamos, es decir “GAGE-“ mas los dos primeros números”. Así queda resuelto el tercer grupo de registros. Aclarar que aquí los registros anteriores deberán contener "GAGE-??", por eso, como he buscado desde la "E-", le he restado -3 que son las tres letras GAG que hay antes. He visto muchos GAGE por ahí en medio y he preferido usar este sistema. Hubiera valido igualmente si busco "GAGE-". Saludos. |
|||||||||||||||
Gracias
|
|||||||||||||||
Erick Gamer
Asiduo Unido: 08/Mayo/2016 Localización: Mexico Estado: Sin conexión Puntos: 387 |
Enviado: 19/Septiembre/2019 a las 19:09 | ||||||||||||||
Excelentes aportaciones las de todos en verdad, en esta ocasión me quedo con la ultima Expresion de Vimipas.
Gracias por compartir su tiempo y conocimiento, voy a repasar las demas funciones aportadas les encontrare un uso en mis aplicaciones. Pueden cerrar el tema y una vez mas agradecido con su valiosa ayuda . Erick Gamer
|
|||||||||||||||
Aprendiz de todos, maestro de nadie.
|
|||||||||||||||
jilo
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 19/Diciembre/2004 Localización: TAFALLA Estado: Sin conexión Puntos: 959 |
Enviado: 21/Septiembre/2019 a las 11:41 | ||||||||||||||
Hola, Como aún esta abierto el tema, me apunto y dejo una funcion que le pasas la cadena como argumento y te devuelve lo buscado. Un aporte más ....
Editado por jilo - 21/Septiembre/2019 a las 12:24 |
|||||||||||||||
Espero te sirva !!!!!!
Iñaki |
|||||||||||||||
VIMIPAS
Colaborador Unido: 06/Enero/2006 Localización: ESPAÑA Estado: Sin conexión Puntos: 5462 |
Enviado: 21/Septiembre/2019 a las 13:52 | ||||||||||||||
Gracias a Emiliove por abrir este hilo de nuevo para que pudiera colocar una última respuesta.
Hola buenas tardes a todos.
Un último ejemplo sobre lo mismo, pero ampliando la posibilidad que nos ofrece Instr de indicarle desde donde debe empezar a buscar aquello que buscamos. Es decir, desde que punto del texto en el que buscamos debe iniciar la búsqueda.
Esta es la SQL:
SELECT IIf(InStr([DESCRIPCIONES],"G-")>0,Mid([DESCRIPCIONES],InStr(1,[DESCRIPCIONES],"G-"),InStr(InStr([DESCRIPCIONES],"G-"),[DESCRIPCIONES]," ")-InStr([DESCRIPCIONES],"G-")),Mid([DESCRIPCIONES],InStr([DESCRIPCIONES],"GAGE-"),7)) AS [EXTRAER MASsimpleTODAVIA] FROM ERIKGAMER;
Y esta es la descripción del desarrollo.
SELECT IIf(InStr([DESCRIPCIONES],"G-")>0,
Para obtener dos grupos de registros nada más haremos un IIF nada más. Obtendremos una respuesta verdadera y otra respuesta falsa. (2 grupos).
Mid([DESCRIPCIONES],InStr(1,[DESCRIPCIONES],"G-")
ESTE 1 que está remarcado ARRIBA en negro, indica el punto desde donde debe empezar a buscar en el campo [DESCRIPCIONES] (Si no lo pongo, también empieza a buscar a partir del primer carácter que exista en [DESCRIPCIONES].
InStr(InStr([DESCRIPCIONES],"G-"),[DESCRIPCIONES]," ")-InStr([DESCRIPCIONES],"G-")), Y en esta otra Instr, con lo que está remarcado ARRIBA en negro, en vez del 1 anterior se situará sobre el valor donde encuentre “G-1”, es otra forma de indicar el punto desde donde debe empezar a buscar en el campo [DESCRIPCIONES], con el valor resultante de esa Instr. A continuación buscaremos el “ “ posterior y le restaremos el valor del “G-“, esto nos da el número de caracteres que deseamos en la cadena. (Lo que buscamos). Primer grupo de registros que buscamos.
Mid([DESCRIPCIONES],InStr([DESCRIPCIONES],"GAGE-"),7))
Segundo grupo de registros que buscamos.
AS [EXTRAER MASsimpleTODAVIA] FROM ERIKGAMER;
Saludos. |
|||||||||||||||
Gracias
|
|||||||||||||||
Erick Gamer
Asiduo Unido: 08/Mayo/2016 Localización: Mexico Estado: Sin conexión Puntos: 387 |
Enviado: 26/Septiembre/2019 a las 15:02 | ||||||||||||||
Apenas vuelvo a ver el hilo.
Gracias nuevamente he probado esta otra funcion y si que es mas corta y funciona igual de bien. Tampoco habia visto la funcion de jilo. Mil Gracias a Todos!!!!!!! Erick Gamer
|
|||||||||||||||
Aprendiz de todos, maestro de nadie.
|
|||||||||||||||
Responder | Página <12 |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |