sql >> Databáze >  >> RDS >> Sqlserver

Získat náhodnou hodnotu z rozsahu v MS SQL?

DECLARE @t TABLE
(VALUE CHAR(3))

INSERT @t
VALUES
('000'),('002'),('005'),('190')


;WITH rnCTE
AS
(
    SELECT -1 + ROW_NUMBER() OVER (ORDER BY TYPE, number, name) AS rn
    FROM master.dbo.spt_values
)
SELECT RIGHT('000' + CAST( rn AS VARCHAR(11)),3)
FROM rnCTE
WHERE NOT EXISTS    (   SELECT 1 FROM @t 
                        WHERE VALUE = rn
                    )
AND rn < 1000

UPRAVIT

Tento dotaz funguje tak, že generuje úplný seznam možných čísel ze systémové tabulky (master.dbo.spt_values ), který zaručeně obsahuje více než 1000 řádků uvnitř CTE rnCTE . -1 je přidáno k ROW_NUMBER aby hodnoty začínaly 0 spíše než 1.

Vnější dotaz nula doplní čísla pro zobrazení a vrátí pouze ta, která nejsou ve zdrojových datech a jsou menší než 1000.



  1. Případ v příkazu Select

  2. Jak ukotvit / zrušit ukotvení dotazu Windows a další karty v SQL Server Management Studio (SSMS) - SQL Server / Výukový program TSQL, část 21

  3. problém s výkonem:rozdíl mezi vybranými s.* a vybranými *

  4. najděte čas, který uplynul mezi dvěma daty v Oracle SQL