SQL - containstable (TILDES, MAYUSCULAS, MINUSCULAS)

   
Vista:

containstable (TILDES, MAYUSCULAS, MINUSCULAS)

Publicado por CHRISTIAN (2 intervenciones) el 29/12/2008 23:46:06
Estimados, tengo el siguiente problema, sucede que tengo una tabla con x campos y estoy usando el containstable para mis busquedas, pero el problema es que si mis registros contienen tildes y yo ingreso una palabra sin tilde por ejempl ( Roldán) y yo ingreso Roldan, no me lo muestra, alguna sugerencia??

Pdt: los campos indexados contienen un collation SQL_Latin1_General_CP1_CI_AI, la cual infiere en tildes, minusculas y mayusculas.

Saben ustedes que mas tengo que cambiar para la solucion?

Gracias.
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

RE:containstable (TILDES, MAYUSCULAS, MINUSCULAS)

Publicado por Christian Calvo (22 intervenciones) el 30/12/2008 05:04:07
utiliza la sentencia COLLATE para convertir tu campo con distincion de acentos y mayusculas en un campo genérico,

ejemplo

SELECT Column1
FROM Table1
WHERE Column1 COLLATE Latin1_General_CI_AS = 'roldan'

en ese caso te tomaria en cuenta palabras como Roldan, ROLDAN, Roldán, ROLDÁN, para el where todo es lo mismo.
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

RE:containstable (TILDES, MAYUSCULAS, MINUSCULAS)

Publicado por CHRISTIAN (2 intervenciones) el 30/12/2008 13:34:41
HOLA GRACIAS POR TU RESPUESTA, LO QUE SUCEDE ES QUE LOS CAMPOS YA LOS CAMBIA POR EL COLLATE Latin1_General_CI_AS YO HAGO EL MATCH EN LA SENTENCIA CONTAINSTABLE POR EJEMPLO:

FROM T_TIE_PRODUCTO PRO WITH(NOLOCK)
INNER JOIN @vtbl_Descendencia c on c.PRO_ID=PRO.PRO_ID
INNER JOIN CONTAINSTABLE (T_TIE_PRODUCTO,*, 'ROLDAN') AS KEY_TBL
ON PRO.PRO_ID = KEY_TBL.[KEY]

Y NO ME DEVUELVE LOS REGISTROS "Roldan, ROLDAN, Roldán, ROLDÁN" ALGUNA SUGERENCIA?

TE ADJUNTO MI CODIGO SQL:

--JORGE GUTIERREZ
alter PROCEDURE dbo.PW_TIE_L_BusquedaProducto -- dbo.PW_TIE_L_BusquedaProducto 0, 1, '-1', -1, 0, 'ROLDÁN', ''
@piint_AreCodigo tinyint,
@piint_TipoCodigo tinyint,
@pivch_Identificador varchar(50),
@piint_ProId int,
@piint_NivelMaximo tinyint,
@pivch_Busqueda varchar(255),
@pivch_BusquedaHtmlEnc varchar(500)
AS
SET NOCOUNT ON
DECLARE @vint_Hijos int, @vint_Hijos1 int, @vint_ProIdPadre int

IF @piint_TipoCodigo<>0
SET @piint_ProId=(SELECT TOP 1 PRO_ID FROM T_TIE_PRODUCTO WITH(NOLOCK) WHERE IDENTIFICADOR=@pivch_Identificador AND ARE_CODIGO=@piint_AreCodigo)
ELSE
IF @pivch_Identificador='-1' OR @piint_ProId=-1
SET @piint_ProId=NULL

SET @piint_ProId=ISNULL(@piint_ProId,-1)

SELECT @vint_Hijos = (SELECT COUNT(PRO_ID) FROM T_TIE_PRODUCTO WITH(NOLOCK)
WHERE ISNULL(PRO_ID_PADRE,-1)= @piint_ProId --AND JER_VISIBLE_MENU='S'
AND PRO_ESTADO<>'I' AND ARE_CODIGO=@piint_AreCodigo)

IF @vint_Hijos>0
BEGIN
SET @vint_Hijos1=@vint_Hijos
SET @vint_ProIdPadre=(SELECT TOP 1 PRO_ID_PADRE FROM T_TIE_PRODUCTO WITH(NOLOCK) WHERE PRO_ID=@piint_ProId)

DECLARE @vtbl_Descendencia
TABLE (PRO_ID_PADRE int, PRO_ID int, PROFUNDIDAD tinyint)

INSERT INTO @vtbl_Descendencia
SELECT A.PRO_ID_PADRE, A.PRO_ID, 1
FROM T_TIE_PRODUCTO A WITH(NOLOCK)
WHERE ISNULL(PRO_ID_PADRE,-1) = @piint_ProId
AND A.PRO_ESTADO<>'I' --AND A.PRO_TIPO<>'C'
AND A.ARE_CODIGO=@piint_AreCodigo

WHILE @@ROWCOUNT>0
BEGIN
INSERT INTO @vtbl_Descendencia
SELECT A.PRO_ID_PADRE, A.PRO_ID, B.PROFUNDIDAD+1
FROM T_TIE_PRODUCTO A WITH(NOLOCK)
INNER JOIN @vtbl_Descendencia B ON B.PRO_ID=A.PRO_ID_PADRE
WHERE A.ARE_CODIGO=@piint_AreCodigo
AND A.PRO_ESTADO<>'I' --AND A.PRO_TIPO<>'C'
AND NOT EXISTS (SELECT D.PRO_ID FROM @vtbl_Descendencia D WHERE D.PRO_ID=A.PRO_ID)
END

IF @pivch_BusquedaHtmlEnc<>@pivch_Busqueda AND LEN(@pivch_BusquedaHtmlEnc)>0
SET @pivch_Busqueda = '('+@pivch_Busqueda+') OR ('+@pivch_BusquedaHtmlEnc+')'

SELECT PRO.PRO_ID,
PRO.ENT_ID,
PRO_ID_PADRE = ISNULL(PRO.PRO_ID_PADRE,-1),
PRO_NOMBRE_PADRE=ISNULL((SELECT PRO_NOMBRE FROM T_TIE_PRODUCTO WITH(NOLOCK) WHERE PRO_ID = PRO.PRO_ID_PADRE),''),
PRO_CODIGO = ISNULL(PRO.PRO_CODIGO,''),
PRO.PRO_NOMBRE,
PRO.PRO_TIPO,
PRO_DESTAQUE = ISNULL(PRO.PRO_DESTAQUE,'N'),
PRO_MONEDA = ISNULL(PRO.PRO_MONEDA,0),
PRO_MONEDA_SIMBOLO = (SELECT MON_SIMBOLO FROM T_TIE_MONEDA WITH(NOLOCK) WHERE MON_CODIGO = PRO.PRO_MONEDA),
PRO_PRECIO = ISNULL(PRO.PRO_PRECIO,0),
PRO_BREVE_DESCRIPCION = ISNULL(PRO.PRO_BREVE_DESCRIPCION,''),
PRO_RUTA_IMAGEN_ASOCIADA = ISNULL(PRO.PRO_RUTA_IMAGEN_ASOCIADA,''),
PRO_HABILITA_OFERTA= ISNULL(PRO.PRO_HABILITA_OFERTA,'N'),
PRO_PRECIO_OFERTA= ISNULL(PRO.PRO_PRECIO_OFERTA,0),
PRO_STOCK_ACTUAL = ISNULL(PRO.PRO_STOCK_ACTUAL,0),
PRO_HABILITA_STOCK = ISNULL(PRO.PRO_HABILITA_STOCK,'N'),
KEY_TBL.RANK
FROM T_TIE_PRODUCTO PRO WITH(NOLOCK)
INNER JOIN @vtbl_Descendencia c on c.PRO_ID=PRO.PRO_ID
INNER JOIN CONTAINSTABLE (T_TIE_PRODUCTO,*, @pivch_Busqueda) AS KEY_TBL
ON PRO.PRO_ID = KEY_TBL.[KEY]
WHERE (@piint_NivelMaximo=0 OR PROFUNDIDAD<=@piint_NivelMaximo)
AND PRO.ARE_CODIGO = @piint_AreCodigo
AND PRO.PRO_ESTADO<>'I' AND PRO.PRO_TIPO<>'C'
ORDER BY KEY_TBL.RANK DESC

END

ELSE
SELECT PRO_ID,
PRO_ID_PADRE,
PRO_NOMBRE_PADRE='',
PRO_CODIGO,
PRO_NOMBRE,
PRO_TIPO,
PRO_DESTAQUE,
PRO_MONEDA,
PRO_MONEDA_SIMBOLO='',
PRO_PRECIO,
PRO_BREVE_DESCRIPCION,
PRO_RUTA_IMAGEN_ASOCIADA,
RANK=''
FROM T_TIE_PRODUCTO
WHERE @piint_ProId=-999
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

RE:containstable (TILDES, MAYUSCULAS, MINUSCULAS)

Publicado por Christian Calvo (22 intervenciones) el 31/12/2008 10:17:56
Pues sinceramente se me complica un poco darte la solución exacta, te recomiendo que pruebes con los parámetros del CONTAINSTABLE como el lenguage, checa los BOL para información.
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

RE:containstable (TILDES, MAYUSCULAS, MINUSCULAS)

Publicado por Edgar C (2 intervenciones) el 12/01/2009 19:03:56
Oye por si aun andas buscando solucion a tu problema con las tildes porque no utilizas la funcion traslate de oracle si es que estas trabajando en oracle.
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