SQL - Texto repetido en la misma cadena

   
Vista:

Texto repetido en la misma cadena

Publicado por Joaquin (2 intervenciones) el 06/09/2012 12:59:54
Buenos días,
A ver si me podéis ayudar con este tema.
Quiero obtener de un campo si se repiten determinadas cadenas.
Ej: Un campo que contiene este valor: jose,antonio,carlos,jose.
jose está repetido ¿Cómo podría saber que texto está repetido?
He puesto ese ejemplo pero la consulta tendría que valer para todos los registros de la tabla, es decir la tabla está compuesta de dos columnas: Cliente y Contacto, por supuesto cada una con valores distintos.
Utilizo SQL-SERVER2008
Un saludo y gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ella

Texto repetido en la misma cadena

Publicado por Ella (4 intervenciones) el 06/09/2012 17:43:33
La solución nececita el uso de las expresiones regulares:
http://msdn.microsoft.com/es-es/magazine/cc163473.aspx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Texto repetido en la misma cadena

Publicado por leonardo_josue (877 intervenciones) el 06/09/2012 17:44:25
Buenos días Joaquín:

Una pregunta, estás diciendo que tienes un campo MULTIVALUADO, es decir, tienes valores separados por comas en un mismo campo y pretendes encontrar los duplicados???

1
2
3
4
5
6
7
8
9
SELECT * FROM tabla;
+------+---------------------+
| id   | nombre              |
+------+---------------------+
|    1 | uno,dos,tres,uno    |
|    2 | dos,dos,tres,cuatro |
|    3 | uno,dos,tres,cuatro |
|    4 | tres,tres,tres,tres |
+------+---------------------+


Si es así ESTÁS EN UN COMPLETO ERROR DE DISEÑO, no deben tener campos multivaluados en ninguna de tus tablas... eso es un diseño terrible y va contra todas las normas que debes seguir, si fueras estudiante y haces esto estarías reprobado, si fueras empleado y lo hicieras deberías ser despedido... así de drástico, tal así que no vale la pena siquiera darte una idea de cómo lo puedes hacer...

Espero haber entendido mal el planteamiento y que en realidad la información la tengas almacenada de otra manera y sea otro el problema... si es el caso te pido que por favor nos expliques mejor y con gusto trataremos de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Texto repetido en la misma cadena

Publicado por Ignacio Esviza ignacio@esviza.com (5 intervenciones) el 09/09/2012 21:33:55
Estimado Leonardo...

¿En base a qué puede Ud. afirmar que tener un campo multivaluado es un completo error de diseño? ¿vió ud. los requerimientos del sistema? ¿sabe Ud. si es un sistema creado desde nuevo o bien es algo con lo que nuestro colega se encontró ya de antes? ¿es necesario afirmar tan categóricamente que si fuera estudiante lo reprobaría? ¿y si fuera empleado lo despediría?

Creo que el errado es Ud. en afirmar tan tajantemente algo que no sabe por qué se diseñó así, por lo que es a Ud. al que le cabría ser reprobado o echado.

"Espero haber entendido mal y que en realidad la información la tengas almacenada de otra manera"... uau! cuánta soberbia!!!!

Esto no es un foro para retar. Es un foro para ayudar.

Saludos
Ignacio Esviza
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Texto repetido en la misma cadena

Publicado por Joaquín (2 intervenciones) el 10/09/2012 13:06:29
Buenos días,
La información de esta tabla que comento la lee de otra tabla que está en otra base de datos.
Tengo que tener así la información para adaptarlo a un desarrollo previo que tiene esta particularidad (Solamente es capaz de leer un registro por transacción)
Como no tengo tiempo para cambiar el desarrollo se me ha ocurrido esta solución un poco chapucera.
El desarrollo hace lo siguiente (Es para el envío de facturas por Email):
Yo tengo en mi programa de gestión un aparatado para personas de contacto y una página princial de cliente (A veces el Email de la persona de contacto y el principal se repiten). La información está en dos tablas diferentes.
Por otro lado tengo el desarrollo que toma la información de una base de datos independiente en Access.
Lo que hice fue hacer un update de los registros de esta BD en access con la información de mi programa de gestión y ahora tengo duplicados y no se como puedo hacer para eliminarlos.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Texto repetido en la misma cadena

Publicado por leonardo_josue (877 intervenciones) el 10/09/2012 17:50:00
Hola de nuevo Joaquín:

Lamentablemente tengo poca experiencia con ACCESS, pero creo que tendrás que programar alguna rutina para "separar" tus campos, tal como lo hicieras con un método SPLIT y actualizar tu BD... Checa alguna de estas ligas, para ver si algo de esto te puede servir.

http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/microsoft-access/respuestas/353404/dividir-un-campo-separado-por-comas

http://office.microsoft.com/es-mx/access-help/funcion-split-HA001228911.aspx

http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/microsoft-access/respuestas/1217682/funciones-en-access

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Texto repetido en la misma cadena

Publicado por leonardo_josue (877 intervenciones) el 10/09/2012 17:39:39
Estimado Ignacio Esviza:

1
2
3
4
¿En base a qué puede Ud. afirmar que tener un campo multivaluado es un completo error
de diseño? ¿vió ud. los requerimientos del sistema? ¿sabe Ud. si es un sistema creado desde
nuevo o bien es algo con lo que nuestro colega se encontró ya de antes? ¿es necesario afirmar
tan categóricamente que si fuera estudiante lo reprobaría? ¿y si fuera empleado lo despediría?


Tengo más de 12 años de experiencia trabajando y diseñando BD, en este mismo foro, tengo casi 500 intervenciones, y soy colaborador no solo de este foro de consultas, si no de algunos otros. Igual y para usted no es razón suficiente como para avalar mi punto de vista, pero me gustaría enumerar alguna razones por las que considero que esto es un mal diseño de BD.

1. Espacio: En primer lugar el campo se tendría que declara como campo VARCHAR, de una longitud tan grande como el mayor número de valores repetidos que pudiera tener... esto puede ser un verdadero problema, pues es posible que no sea tan fácil determinar cuál es este valor máximo. Además, supongamos que la cardinalidad entre registros no sea uniforme, eso podría tener casos como estos:

campo
1
1,2
1,2,3,
1,2,3,4,5,6,7,8,8,9,10,11......., 99,100

si comparas los casos, en el primer caso sólo se está ocupando un caracter, sin embargo el campo se debió de declarar con una longitud muy grande, lo que implica un desperdicio innecesario.

2. Integridad referencial: los campos multivaluados no permiten integridad referencial, es decir, imagina que estos números son referencias hacia otra tabla, no puedes definir reglas de llaves foráneas, ni de llaves duplicadas... Alguna vez alguno de mis maestros me dijo que un conjunto de datos sin integridad, es en realidad un montón de basura... Palabras que también pueden sonar muy duras, pero que comparto sin lugar a dudas.

3. Registros únicos: Que es a final de cuentas el problema que se está presentando en estos casos... Creo que no tengo qué dar mayores explicaciones.

Hasta la fecha, no he encontrado una razón válida para manejar un campo multivaluado. igual y usted podría indicarme lo contrario... Después de todo siempre estoy dispuesto a aprender algo nuevo y estoy abierto a cualquier crítica o comentario.

1
2
"Espero haber entendido mal y que en realidad la información la tengas almacenada de otra
manera"... uau! cuánta soberbia!!!!


Estás en un completo error mi estimado Ignacio Esviza, no creo que me conozcas lo suficiente como para calificarme como soberbio. Tu juicio de valor no tiene razón de sustento.

1
Esto no es un foro para retar. Es un foro para ayudar.


Estoy de acuerdo completamente con esto, pero después de todo ¿crees que tu comentario ayudó en algo al compañero Joaquín?

Si te tomas un poco de tiempo para revisar el foro te podrás dar cuenta que mi intención siempre es la de ayudar, en lo que puedo, a todos los foristas. Y no hago no por búsqueda de reconocimiento, no por soberbia, no por sentirme superior a los demás, o por demostrar que sé mucho... lo hago de manera desinteresada, y con la mejor disponibilidad de ayudar.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar