Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¿Se pueden comparar máscaras guardadas en una base de datos? (https://www.clubdelphi.com/foros/showthread.php?t=67228)

voci 06-04-2010 18:33:30

¿Se pueden comparar máscaras guardadas en una base de datos?
 
Con la palabra clave "Like" se pueden crear patrones de búsqueda:

SELECT * FROM base de datos
WHERE nombre LIKE 'ANT%'

Pero ¿y lo contrario?, es decir guardar en la base de datos patrones y acceder a ellos con alguna claúsula.

Supongamos que tenemos este patrón en la base de datos 'ANT', queremos buscar ese registro desde 'ANTIGUO' ó desde 'ANTONIO', ¿es factible?.

Saludos.

rgstuamigo 06-04-2010 22:17:37

Disculpa pero no acabo de entenderte, podrias ser un poco más detallista?;), mejor si pones algun ejemplo para una mejor comprensión.;).
Saludos...:)

voci 07-04-2010 19:55:53

A la aplicación, en uno de los apartados, se le introducen datos de artículos del tipo 'DGH25G486', 'CF54F2789', '2DGH5G486', etc. Observa que el tercer código es una reposición del mismo artículo que el primero, asi es como distinguen las reposiciones.

El caso es que quieren, por ejemplo ,a todos los artículos que incluyan "DGH" hacerles un descuento del 2%, a los que incluyan "CF" otro del 4%, etc.

De ahí la pregunta de si se puede, partiendo del artículo, comparar dicho artículo con la pertinente máscara creada en la base de datos, en esta base irá además el descuento pertinente.

Gracias por tú interes, espero haberme explicado correctamente.

rgstuamigo 07-04-2010 21:40:52

Si te estoy entendiendo bien :rolleyes:, tu consulta SQL tendría que ser muy parecida o similar a ésta:
Código SQL [-]
SELECT * FROM MiTabla t1,Patrones p 
WHERE t1.nombre LIKE Concat('%',p.Patron,'%')

Patron es el campo de Patrones que tienes almacenado en tu tabla de Patrones.;).
Saludos...:)

voci 08-04-2010 13:40:28

No me encuentra ningún registro, tampoco me permite la construcción exactamente igual que la escribes tú, de todas formas esta es la que he creado yo como prueba:

SELECT * FROM Patrones p WHERE 'DGH25G486' LIKE ('%p.Patron%')

y así tampoco me devuelve ningún resultado:

SELECT * FROM Patrones p WHERE 'DGH25G486' LIKE ('%,p.Patron,%')

por supuesto tengo una tabla con un campo Patron igual a 'DGH'

Saludos.

rgstuamigo 08-04-2010 23:33:20

Cita:

Empezado por voci (Mensaje 359731)
No me encuentra ningún registro, tampoco me permite la construcción exactamente igual que la escribes tú, de todas formas esta es la que he creado yo como prueba:

SELECT * FROM Patrones p WHERE 'DGH25G486' LIKE ('%p.Patron%')

y así tampoco me devuelve ningún resultado:

SELECT * FROM Patrones p WHERE 'DGH25G486' LIKE ('%,p.Patron,%')

por supuesto tengo una tabla con un campo Patron igual a 'DGH'

Saludos.

Bueno el anterior ejemplo estaba hecho para MySQL, entonces sería muy importantes que menciones que Servidor de base de dato estas usando?..¿MySQL,MS SQL Server,Oracle,Firebird,PostGreSQL,etc? ¿cuál?:confused:.
Si te das cuenta en el ejemplo anterior estoy usando la funcion "Concat" para concatenar el simbolo "%" con el patron almacenado en la Base de dato.;).
Saludos....:)

voci 10-04-2010 12:45:25

Perdona que no te haya contestado antes, ayer me fué imposible entrar en la página.

Cita:

Empezado por rgstuamigo
entonces sería muy importantes que menciones que Servidor de base de dato estas usando

Tienes razón, debí haber empezado comentando el servidor de base de datos, el programa está desarrollado en delphi, el servidor es Borland Database Engine.

Saludos.

rgstuamigo 10-04-2010 14:49:47

Aclarando un poco
 
Cita:

Empezado por voci (Mensaje 359898)
Perdona que no te haya contestado antes, ayer me fué imposible entrar en la página.



Tienes razón, debí haber empezado comentando el servidor de base de datos, el programa está desarrollado en delphi, el servidor es Borland Database Engine.

Saludos.

Borland Database Engine conocido por BDE no es un servidor de base de dato;), es solamente un motor de conexion que gestiona la conexion desde y hacia el servidor de Base de datos y el host cliente.;). En otras palabra es un intermediario entre la aplicacion y el servidor de Base de dato que gestiona la conexion.;)
Hoy por hoy el BDE ya está obsoleto,antiguamente se lo utilizaba, ya que no se le está dando soporte, claro está que siempre existen programadores que aún lo utilizan a pesar que existen muchos componentes nuevos que fascilitan la conexion sin usar el BDE.;)

En cuanto al servidor de base de dato que estás utilizado, lo que te estoy pidiendo es especificar con que Sistema de gestión de Base de datos estás trabajando? :confused:, e incluso en mi anterior post te he mencionado algunos Servidores de base de datos muy conocidos.
Saludos... :)

voci 10-04-2010 17:26:06

Despues de mirar en el BDE Administrator, este me indica que es Microsoft SQL Server.

Saludos.

rgstuamigo 10-04-2010 17:51:33

Cita:

Empezado por voci (Mensaje 359910)
Despues de mirar en el BDE Administrator, este me indica que es Microsoft SQL Server.

Saludos.

Bueno entonces en ese caso para concatenar cadenas en MS SQL Server lo que se hace es concatenarlo con el simbolo "+" muy parecido tal como se hace en Delphi, por tanto tu consulta SQL quedaría mas o menos así:
Código SQL [-]
SELECT * FROM MiTabla t1,Patrones p 
WHERE t1.nombre LIKE '%'+p.Patron+'%'
Consejo:
Antes de querer hacer o implementar algo, lo primero que se debe averiguar, es con que Servidor se está trabajando, ésto lo digo por que tal parece que ni voz mismo sabías el servidor con el que trabajas, lo cual en otras palabras sería el colmo de un desarrollador, o quizas en tu caso haya sido otra persona que desarroló la aplicacion y tú solo la estés modificando o mejorando, de todas forma espero que te haya podido ayudar en algo.;).
Saludos...:)


La franja horaria es GMT +2. Ahora son las 23:36:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi