Ajuda com consulta SQL. Ignorar acentos e maiusculas e minusculas

Pessoal é o seguinte, quero fazer um select dessa forma:

select * from base
where cidade not in (select chaCidade from tabCidade)

Só que eu quero ignorar acentos e as letras maísculas e mínusculas.

Alguem pode me ajudar?

Aqui na Empresa cara, agente usa uma funçãozinha pra isso, não sei que banco vc usa mas ta ai a de oracle.

create or replace
FUNCTION          "SEM_ACENTO" (TEXTO IN CLOB)
  RETURN CLOB
  IS
    RETORNO CLOB;
  BEGIN
    SELECT UPPER(TRANSLATE( SUBSTR(TEXTO,1,4000) ,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC')) INTO RETORNO FROM DUAL;
    RETURN RETORNO;
  END sem_acento;

Ai ficaria tipo assim eu esqueci a chamada de função no oracle tá kkkkk…

select * from base   
where semacento(cidade) not in (select semacento(chaCidade) from tabCidade);

Falow.

[quote=colored]Aqui na Empresa cara, agente usa uma funçãozinha pra isso, não sei que banco vc usa mas ta ai a de oracle.

create or replace
FUNCTION          "SEM_ACENTO" (TEXTO IN CLOB)
  RETURN CLOB
  IS
    RETORNO CLOB;
  BEGIN
    SELECT UPPER(TRANSLATE( SUBSTR(TEXTO,1,4000) ,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC')) INTO RETORNO FROM DUAL;
    RETURN RETORNO;
  END sem_acento;

Amigo, utilizei uma função que achei do sql server, porém a consulta fica muito lenta, pois são cerca de 5600 linhas.
como posso melhor esse processo?

USE [extranet_antigoatual]
GO
/****** Object:  UserDefinedFunction [dbo].[remove_acento]    Script Date: 01/27/2012 14:58:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[remove_acento](@Texto varchar(8000))
returns varchar(50)  
AS  

BEGIN
         declare @SemAcento varchar(50)  
 
         select @SemAcento = replace(@Texto,'á','a')   
         select @SemAcento = replace(@SemAcento,'à','a')   
         select @SemAcento = replace(@SemAcento,'ã','a')   
         select @SemAcento = replace(@SemAcento,'â','a')   
         select @SemAcento = replace(@SemAcento,'é','e')   
         select @SemAcento = replace(@SemAcento,'è','e')   
         select @SemAcento = replace(@SemAcento,'ê','e')   
         select @SemAcento = replace(@SemAcento,'í','i')   
         select @SemAcento = replace(@SemAcento,'ì','i')   
         select @SemAcento = replace(@SemAcento,'î','i')   
         select @SemAcento = replace(@SemAcento,'ó','o')   
         select @SemAcento = replace(@SemAcento,'ò','o')   
         select @SemAcento = replace(@SemAcento,'ô','o')   
         select @SemAcento = replace(@SemAcento,'õ','o')   
         select @SemAcento = replace(@SemAcento,'ú','u')   
         select @SemAcento = replace(@SemAcento,'ù','u')   
         select @SemAcento = replace(@SemAcento,'û','u')   
         select @SemAcento = replace(@SemAcento,'ü','u')   
         select @SemAcento = replace(@SemAcento,'ç','c')   

         return (UPPER(@SemAcento))  
END

Ai ficaria tipo assim eu esqueci a chamada de função no oracle tá kkkkk…

select * from base   
where semacento(cidade) not in (select semacento(chaCidade) from tabCidade);

Falow.[/quote]

O Sql Server tem o recurso de collations.

Com ela você pode dizer que campos de texto são case-insensitive e accent-insensitive.

Ou seja, ele já ignora essas diferenças entre acento e “caixa” automaticamente.

[quote=AbelBueno]O Sql Server tem o recurso de collations.

Com ela você pode dizer que campos de texto são case-insensitive e accent-insensitive.

Ou seja, ele já ignora essas diferenças entre acento e “caixa” automaticamente.[/quote]

é possível aplicar aos duas collations ao mesmo tempo?

att