0

Retornando um registro aleatório em MS SQL Server

criado por Olavo Alexandrino em 11/06/2003 2:21pm
Vamos verificar como essa consulta é realizada no MySQL. Levaremos em consideração a tabela empresas. A nossa tabela, dentro outros que se usam usualmente, terá os seguintes campos:

id_empresa,
TIPO: Primary Key, Unsigned, Not Null e claro AutoIncrement.

e o Segundo campo será o nome da empresa:

nome_empresa.

Só é necessário esses dois campos, pois tendo em posse o ID do registro, no caso o “id_empresa” podemos realizar qualquer coisa em relação aos dados desse registro.

Para retornar um registro aleatório em “N” registros da tabela empresas têm-se a seguinte consulta:

SELECT * FROM empresas ORDER BY RAND() LIMIT 1

Muito fácil, não??

Em SQL Server, essa mesma consulta seria o seguinte:

SELECT TOP 1 * FROM empresas ORDER BY RAND()

Ela não daria erro, mas no nosso caso não atenderia ao problema em questão. Iremos agora para o que interessa: Como utilizar a função RAND() da TRANSACT SQL para retornar um único registro aleatório entre “N” registros???

Comentários:

Mostrando 1 - 6 de 6 comentários
fccd disse:
Maneiras Corretas de Ordernação!

No Mysql
select * from tabela order by rand()

No SQL SERVER
select * from tabela order by newid()

No PostGreSQL
Select * from tabela order by random()

No Oracle
Select coluna from (select coluna from tabela order by dbms_random.value) where rownum = 1

Valeu


04/01/2008 11:44am (~16 anos atrás)

Campo utilizado: datetime
O Parâmetro 8, retorna a hora da função GETDATE(), caso não funcione, deve retornar a String da hora do campo datetime para comparar pelo valor retornado pela função GETDATE.
26/06/2003 7:24am (~21 anos atrás)

Bem Wellington, não sei se vai dá certo, mas tente o seguinte:

SELECT * FROM datas WHERE (TimeIn>=CONVERT(CHAR,GETDATE(),8) AND TimeOut<=CONVERT(CHAR,GETDATE(),8))

PS: m SQL SERVER o parâmetro 8 passado como pela função CONVERT retorna a hora de um campo "datetime"

Tente isso aí!!
26/06/2003 7:20am (~21 anos atrás)

Putz, bem que tu poderia me ajudar em uma pequena coisa... tipow, estou tentando a dias descobrir uma forma de fazer um script de pré definição ussando MySQL + ASP mas vamos la... SQL é tudo a mesma coisa então acho que você pode me esclarecer algumas coisas...

Eu precisso que um determinado resultado seja exibido ao usuário conforme a hora local do servidor...
Tipow tenho 2 rows TimeIn - TimeOut
na TimeIn tenho 14:00 e na TimeOut tenho 15:00 horas

então c forme 14:42 ele mostra o resultado que tem entre 14:00 e 15:00.
23/06/2003 8:09pm (~21 anos atrás)

Perfeito Diego,

bem quando precisei utilizar isso não sabia dessa função, como ficou legal e funcionou resolvi publicar!!

Devia até ter mencionado no artigo pois ainda tem outra particularidade.

A forma que fiz é eficiente apenas para UM ÚNICO registro, pois de por exemplo fizermos:


SELECT TOP 10 * FROM empresas WHERE id_empresa >= (RAND() * (SELECT MAX(id_empresa) FROM empresa))

e se o parâmetro retornado for 89, por exemplo, serão retornado, em SEQUÊNCIA, os próximos 10 a partir de 89.
Ou seja, o único registro aleatório foi o 89, os demais seguiram a sequência.

Caso fizermos:

SELECT TOP 10 * FROM empresas ORDER BY NEWID()

realmente teremos 10 aleatórios, pois para cada registro, é gerado um valor aleatório diferente.

Bem, acho que agora ficou completo!!!

Valeu!!
12/06/2003 12:19pm (~21 anos atrás)

Olavo, outra forma para retornar um registro aleatório do SQL Server seria utilizando a função "NEWID()", no exemplo utilizado por vc poderia ser utilizado da seguinte forma: SELECT TOP 1 * FROM empresas ORDER BY NEWID().

[]'s Diego Vulerio.
12/06/2003 7:56am (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)