Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
R.C.Tulio

SELECT AVANCADO CONTENDO

Pergunta

Boa tarde Amigo

Gostaria de saber se você tem um tipo de consulta, onde tenho todas as cidades do Brasil

Ai tenho um select

 

SELECT * FROM tbmunicipio WHERE Nome LIKE unaccent('%PARA%') OR NOME LIKE unaccent('%PARA')

ORDER BY UNACCENT(LOWER(NOME)) LIKE 'PARA%'

 

Onde procura todas as cidades que contem PARA, ai trouxe

 

ALTO PARAÍSO

JI-PARANÁ

PARAGOMINAS

PARAUAPEBAS

MACAPARANA

PARACURU

PARANÃ

PARANÁ

 

E assim por diante..... gostaria que trouxesse todas as consulta em ordem

Alfabética o que começa com PARA e depois em ordem alfabética o que contem PARA, mas que não

Repita a cidade que já tenho

 

PARACURU

PARAGOMINAS

PARANÃ

PARANÁ

PARAUAPEBAS

ALTO PARAÍSO

JI-PARANÁ

MACAPARANA

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

8 respostas a esta questão

Recommended Posts

Banco Postgres - tenho uma tabela de cidades , como diz a pergunta , tenho que procurar uma cidade que com PARA, e depois as que contem PARA, , dei uma olhada no que você mandou mas nao entendi muito

 

SELECT * FROM tbmunicipio WHERE Nome LIKE unaccent('%PARA%') OR NOME LIKE unaccent('%PARA')

ORDER BY UNACCENT(LOWER(NOME)) LIKE 'PARA%'

 

esse select acima busca todas as cidades que contem PARA, acho que so falta alguma coisa (ORDER BAY) para ordernar que comeca com PARA, e as cidades que nao comecam com PARA ficar embaixo, qualquer coisa veja o custo, pois estou precisando rapido,para entregar o projeto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente

...

Order by sign(position('para' in NOME)) desc , UNACCENT ...

 

Tratando a acentuação , não editei melhor pois estou num tablet.

A ideia é ordenar primeiro quem tem o string e depois as demais.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao deu certo esse order by esta dando erro, ai fiz o seguinte

 

SELECT * FROM tbmunicipio WHERE Nome like unaccent('%PARA%') 
order by ((POSITION('PARA' in NOME)) nome asc

 deu certo a primeira que preciso, mas o que contem PARA ele nao traz em ordem

JI-PARANÁ

MACAPARANA

ALTO PARAÍSO em vez de 

 

ALTO PARAÍSO 

JI-PARANÁ

MACAPARANA 

a funcao SIGN ele bagunca o select e traz tudo que contem

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fiz algo parecido em Oracle e funcionou , o sign é para trazer 0 não tem pará , 1 tem pará (em qq posição).

 

fiz com base na odc . não tenho Pg pata testar 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia primeiro quero desculpar pois naoentrei mais no forum, mas segue o SELECT e o ORDER BY

mas segue postgres 9.5 tabela de municipios do ibge

 

QryMunicipio.Active := False;
  QryMunicipio.SQL.Clear;
  QryMunicipio.SQL.Add('SELECT * FROM TBMUNICIPIO');
  QryMunicipio.SQL.Add('WHERE 1 <> 2');

  if Trim(TxtColuna1.Text) <> EmptyStr then
    begin
      QryMunicipio.SQL.Add('AND NOME LIKE ''%'':PARAMETRO1||''%''');
      QryMunicipio.ParamByName('PARAMETRO1').AsString := TxtColuna1.Text;
    end;

  if Trim(TxtColuna1.Text) <> EmptyStr then
      QryMunicipio.SQL.Add('ORDER BY POSITION(' + QuotedStr(TxtColuna1.Text) + ' IN NOME), NOME, CODMUNIBGE')
  else
    QryMunicipio.SQL.Add('ORDER BY NOME');

  QryProduto.Active := True;

 

 

essa tela e a primeira pesquisa so que contem para onde começa e a segunda tela e que falta (nao mexi mais) mas a qual deveria ter trazido em ordem alfabetica

image.png.1ed1b2ea5a86aeb5350ac1496b419304.png

 depois que terminou todos os PARA inicial ele deveria ter coloca os que contem PARA em ordem alfabetica e nao tras

image.png.83666313fec3305321042cae96d61732.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.