Ir para conteúdo

POWERED BY:

Arquivado

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

Alberto Silva

Order By pela quantidade de vírgulas do campo

Recommended Posts

Olá Colegas,

 

Preciso realizar um SELECT sendo que o ORDER BY deve ser pela quantidade de virgulas do campo. Por exemplo:

 

Registro 1: Campo1 = '1,11'

Registro 2: Campo1 = '1,2'

Registro 3: Campo1 = '1,2,3'

Registro 4: Campo1 = '1,345'

 

SELECT * from MinhaTabela ORDER BY ????(Campo1) DESC, len(Campo2) DESC, Campo3 DESC

 

 

Grato pela ajuda.

 

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta solução depende do BD em questão.

 

Faça uma função (ou use alguma já existente) que conte o número de ocorrências de uma determinada string em outra.

Use esta função no Order by do Select.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta solução depende do BD em questão.

 

Faça uma função (ou use alguma já existente) que conte o número de ocorrências de uma determinada string em outra.

Use esta função no Order by do Select.

 

Motta,

 

Obrigado pela sua resposta. O BD é SQL Server, vou criar a função e usar conforme indicou.

 

Um abraço.

 

Motta,

 

Nunca trabalhei com UDF e estou bastante perdido, você poderia me passar alguma referência dentro da minha necessidade?

 

Obrigado!

 

Criei a UDF conforme sintaxe abaixo porém depois de muita demora o SQL apresenta a mensagem de Tempo Excedido e não retorna o resulta da pesquisa. Não sei se há alguma erro com a UDF.

 

CREATE FUNCTION [dbo].[ContaVirgula] (@Campo varchar(120))

RETURNS int

AS

BEGIN

DECLARE @Ocorrencias int

DECLARE @Posicao int

DECLARE @Caracter varchar(1)

SET @Posicao = 1

WHILE @Posicao <= LEN(@Campo)

SET @Caracter = SUBSTRING(@Campo,@Posicao,1)

IF @Caracter = ','

SET @Ocorrencias = @Ocorrencias + 1

SET @Posicao = @Posicao + 1

RETURN @Ocorrencias

END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço SqlServer vou mover este tópico para lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alberto, eu tenho uma funcao que conta qq caracterer de um campo:

 

CREATE FUNCTION [dbo].[contacaracter]
(@campo      VARCHAR(max),
 @caracter CHAR(1))
RETURNS INT
 BEGIN

     RETURN ( Len(@campo) - Len(REPLACE(@campo, @caracter, '')) )

 END
GO

 

Eu usei a funcao acima no exemplo que segue:

declare @table table (campo varchar(10))

insert into @table values ('1,1')
insert into @table values ('2,2,2')
insert into @table values ('3,3,3,3')


select LEN(campo), dbo.contacaracter(campo,',')
from @table 
order by  dbo.contacaracter(campo,',') 

 

Veja se te ajuda.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alberto, eu tenho uma funcao que conta qq caracterer de um campo:

 

CREATE FUNCTION [dbo].[contacaracter]
(@campo      VARCHAR(max),
 @caracter CHAR(1))
RETURNS INT
 BEGIN

     RETURN ( Len(@campo) - Len(REPLACE(@campo, @caracter, '')) )

 END
GO

 

Eu usei a funcao acima no exemplo que segue:

declare @table table (campo varchar(10))

insert into @table values ('1,1')
insert into @table values ('2,2,2')
insert into @table values ('3,3,3,3')


select LEN(campo), dbo.contacaracter(campo,',')
from @table 
order by  dbo.contacaracter(campo,',') 

 

Veja se te ajuda.

 

Abçs

 

Jr,

 

Obrigado, vou testar a sua função.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Alberto, eu tenho uma funcao que conta qq caracterer de um campo:

 

CREATE FUNCTION [dbo].[contacaracter]
(@campo      VARCHAR(max),
 @caracter CHAR(1))
RETURNS INT
 BEGIN

     RETURN ( Len(@campo) - Len(REPLACE(@campo, @caracter, '')) )

 END
GO

 

Eu usei a funcao acima no exemplo que segue:

declare @table table (campo varchar(10))

insert into @table values ('1,1')
insert into @table values ('2,2,2')
insert into @table values ('3,3,3,3')


select LEN(campo), dbo.contacaracter(campo,',')
from @table 
order by  dbo.contacaracter(campo,',') 

 

Veja se te ajuda.

 

Abçs

 

Jr,

 

Obrigado, vou testar a sua função.

 

Abraço!

 

Jr,

 

Não entendi porque deu erro de sintaxe em @Campo VARCHAR(MAX), informando um valor, por exemplo, @Campo VARCHAR(20) funcionou legal. Vou tentar chamar a função da minha aplicação em VB6.

 

Obrigado, mais uma vez!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu caso, eu uso SQL2008, entao posso declarar como varchar(max)... o que nao eh aconselhavel dependendo da aplicacao e da sua estrutura....

 

que bom que deu certo....

 

qq duvida eh soh postar

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Len(@campo) - Len(REPLACE(@campo, @caracter, ''))

 

Putz, muito bem sacado http://forum.imasters.com.br/public/style_emoticons/default/excl.gif

Resolveu em uma linha, a besta aqui ia varrer um array contando um a um .....

 

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu caso, eu uso SQL2008, entao posso declarar como varchar(max)... o que nao eh aconselhavel dependendo da aplicacao e da sua estrutura....

 

que bom que deu certo....

 

qq duvida eh soh postar

 

Abçs

 

 

Alberto, o tipo varchar(max) foi introduzido a partir do SQL Server 2005. O seu é o 2000?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz, muito bem sacado

Resolveu em uma linha, a besta aqui ia varrer um array contando um a um .....

 

hehehe acontece... :P

 

O importante eh que deu certo pro usuario :P

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.