Ver la Versión Completa : [Sintaxis] COBOL Y SQL
jjcol
28 de septiembre de 2021, 06:12
Buenas noches alguien conoce cómo usar el EL WHERE LIKE es que necesito hacer una consulta que me traiga las filas que coincidan en cada columna.
ejemplo hago la consulta así:
SELECT varbile1, variable2, varible3 FROM table WHERE columna1 LIKE '%" dato_buscar "%' or
WHERE columna2 LIKE '%" dato_buscar "%' or
WHERE columna3 LIKE '%" dato_buscar "%'
pero no puedo hacer una cuarta búsqueda no funciona cuando hago la consulta alguien sabe por que puede ser necesito recorrer 10 columnas para buscar datos que coincidan uso power cobol 9.
JCantero
28 de septiembre de 2021, 09:22
Te sobran los where.
Debe de ser así
SELECT varbile1, variable2, varible3 FROM table WHERE
columna1 LIKE '%" dato_buscar "%' or
columna2 LIKE '%" dato_buscar "%' or
columna3 LIKE '%" dato_buscar "%'
De cualquier forma te recomiendo que en vez de estar probando en COBOL prueba el SELECT en la base de datos y cuando tengas lo que tu necesitas, te lo llevas al COBOL
Kuk
28 de septiembre de 2021, 09:25
@jjcol, un cliente SQL que yo uso desde hace más de 5 años: [Aporte] DBeaver - cliente SQL Freeware (OpenSource) - COBOL Foro (https://www.cobolforo.es/showthread.php?t=471)
Xavier
28 de septiembre de 2021, 12:08
Yo la consulta la haría de esta forma
WORKING-STORAGE SECTION.
01 DatoABuscar PIC X(....).
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 CampoDeBusqueda PIC X(...).
01 ResultadoDato1 PIC X(...).
01 ResultadoDato2 PIC X(...).
01 ResultadoDato3 PIC X(...).
EXEC SQL END DECLARE SECTION END-EXEC.
PROCEDURE DIVSION.
MOVE SPACES TO DatoABuscar1
MOVE "Lo que quiero buscar" TO DatoABuscar
STRING "%" Delimited by size
DatoABuscar Delimited by " "
"%" Delimited by size
INTO CampoDeBusqueda1
De esta forma, el campo "CampoDeBusqueda" quedaría algo así como "%Lo que quiero buscar%"
y luego, la sentencia SQL, sería
EXEC SQL
SELECT dato1, dato2, dato3
INTO :ResultadoDato1, :ResultadoDato2, :ResultadoDato3
FROM Tabla
WHERE Campo1 LIKE CampoDeBusqueda1,
AND/OR Campo2 LIKE CampoDeBusqueda1
END-EXEC
jjcol
29 de septiembre de 2021, 00:36
Muchas gracias por su respuestas pero es que si me funciona como lo tengo el problema es que no puedo hacer
la búsqueda en mas de 3 columnas cuando uso el 4 cuarto columan4 LIKE
las basqueas por LIKE tienen algún limite ?
---------- Post añadido : 17:36 ---------- Post anterior : 16:58 ----------
Te sobran los where.
Debe de ser así
SELECT varbile1, variable2, varible3 FROM table WHERE
columna1 LIKE '%" dato_buscar "%' or
columna2 LIKE '%" dato_buscar "%' or
columna3 LIKE '%" dato_buscar "%'
Si yo lo uso igual es que que tenia un pco de afán y escribí y redacte mal la parte del código pero el problema que tengo es que solo dejar hacer esa tres consultas si le agrego otra consulta no puedo deja de funcionar
Kuk
29 de septiembre de 2021, 09:58
@jjcol, enséñanos la consulta que no funciona, a ver
JCantero
29 de septiembre de 2021, 18:05
Revisa la longitud del string donde montas la consulta para ver el tamaño que tiene.
Pero como dice @Kuk, pon el trozo de codigo donde haces la consulta para poder ayudarte
jjcol
30 de septiembre de 2021, 03:51
adjunto el código pero revisando me di de cuenta que solo me trae el dato si coinciden exactamente igual y no por si tiene alguna coincidencia.
y solo me funciona con las tres primeras búsquedas
STRING "SELECT "
"nit, "
"nombre, "
"apellido, "
"telefono, "
"celular, "
"direccion, "
"salario, "
"bonos, "
"extras"
"FROM usuario WHERE "
"nit LIKE '%" busqueda "%' OR "
"nombre LIKE '%" busqueda "%' OR "
"apellido LIKE '%" busqueda "%' "
pero de esta forma no funciona que son con mas de tres búsquedas
STRING "SELECT "
"nit, "
"nombre, "
"apellido, "
"telefono, "
"celular, "
"direccion, "
"salario, "
"bonos, "
"extras"
"FROM usuario WHERE "
"nit LIKE '%" busqueda "%' OR "
"nombre LIKE '%" busqueda "%' OR "
"apellido LIKE '%" busqueda "%' OR"
"telefono LIKE '%" busqueda "%' OR "
"celular LIKE '%" busqueda "%' OR "
"direccion LIKE '%" busqueda "%'"
JCantero
30 de septiembre de 2021, 08:53
me di de cuenta que solo me trae el dato si coinciden exactamente igual y no por si tiene alguna coincidencia.
y solo me funciona con las tres primeras búsquedas
Revisa esto:
Pones:
WHERE "
"nit LIKE '%" busqueda "%' OR
Si busqueda es un string de 20 y contiene "pepe " esta buscando
WHERE "
"nit LIKE '%pepe %' OR
Cuando tu quieres buscar:
WHERE "
"nit LIKE '%pepe%' OR
Entonces debes de poner, en este caso;
WHERE "
"nit LIKE '%" busqueda(1:4) "%' OR
O sea que tienes que delimitar el string busqueda, ya que creo, te esta buscando los espacios
perform varying i from 2 by 1 until i = 21 or busqueda(i:) = ' '
continue
end-perform
WHERE "
"nit LIKE '%" busqueda(1:i-1) "%' OR
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.