sql >> Databasteknik >  >> RDS >> Sqlserver

Slumpmässig post från en databastabell (T-SQL)

Finns det ett kortfattat sätt att hämta en slumpmässig post från en sql-servertabell?

Ja

SELECT TOP 1 * FROM table ORDER BY NEWID()

Förklaring

En NEWID() genereras för varje rad och tabellen sorteras sedan efter den. Den första posten returneras (dvs posten med "lägst" GUID).

Anteckningar

  1. GUID genereras som pseudoslumptal sedan version fyra:

    Version 4 UUID är avsedd för att generera UUID från verkligt slumpmässiga eller pseudo-slumpmässiga nummer.

    Algoritmen är som följer:

    • Sätt de två mest signifikanta bitarna (bitarna 6 och 7) av theclock_seq_hi_and_reserved till noll respektive ett.
    • Ställ in de fyra mest signifikanta bitarna (bitarna 12 till 15) i fältet time_hi_and_version till 4-bitars versionsnumret från avsnitt 4.1.3.
    • Ställ in alla andra bitar till slumpmässigt (eller pseudo-slumpmässigt) valda värden.

    —A Universally Unique IDentifier (UUID) URN-namnområde - RFC 4122

  2. Alternativet SELECT TOP 1 * FROM table ORDER BY RAND() kommer inte att fungera som man skulle kunna tro. RAND() returnerar ett enda värde per fråga, så alla rader kommer att dela samma värde.

  3. Även om GUID-värden är pseudo-slumpmässiga, behöver du en bättre PRNG för de mer krävande applikationerna.

  4. Typisk prestanda är mindre än 10 sekunder för cirka 1 000 000 rader - naturligtvis beroende på systemet. Observera att det är omöjligt att träffa ett index, därför kommer prestandan att vara relativt begränsad.



  1. Hur infogar jag flera kryssrutor i en tabell?

  2. org.postgresql.util.PSQLEUndantag:Stora objekt får inte användas i auto-commit-läge

  3. Naturlig (mänsklig alfanumerisk) sortering i Microsoft SQL 2005

  4. SQL Server datumformat funktion