Sdílet prostřednictvím


Logické funkce - NEJMENŠÍ (Transact-SQL)

Platí na: SQL Server 2022 (16.x) a nowše verzie Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database in Microsoft Fabric

Tato funkce vrací minimální hodnotu ze seznamu jednoho nebo více výrazů.

Transact-SQL konvence syntaxe

Syntaxe

LEAST ( expression1 [ , ...expressionN ] )

Arguments

výraz1, výrazN

Seznam výrazů oddělených čárkami pro libovolný srovnatelný datový typ. Funkce LEAST vyžaduje alespoň jeden argument a podporuje maximálně 254 argumentů.

Každý výraz může být konstanta, proměnná, název sloupce nebo funkce a libovolná kombinace aritmetických, bitových a řetězcových operátorů. Jsou povoleny agregované funkce a skalární poddotazy.

Návratové typy

Vrátí datový typ s nejvyšší předností z množiny typů předaných funkci. Další informace naleznete v tématu priorita datových typů (Transact-SQL).

Pokud mají všechny argumenty stejný datový typ a typ je podporován pro porovnání, LEAST vrací tento typ.

Jinak funkce implicitně převede všechny argumenty na datový typ s nejvyšší prioritou před porovnáním a použije tento typ jako návratový typ.

U číselných typů bude škála návratového typu stejná jako u argumentu nejvyšší přednosti, nebo u největšího měřítka, pokud je více argumentů s datovým typem s nejvyšší prioritou.

Poznámky

Všechny výrazy v seznamu argumentů musí být datového typu, který je srovnatelný a který lze implicitně převést na datový typ argumentu s nejvyšší prioritou.

Před porovnáním probíhá implicitní převod všech argumentů na datový typ s nejvyšší prioritou.

Pokud není podporována implicitní převod typů mezi argumenty, funkce selže a vrátí chybu.

Pro více informací o implicitní a explicitní konverzi viz Převod datových typů (Database Engine).

Pokud jeden nebo více argumentů není NULL, pak NULL jsou argumenty při srovnávání ignorovány. Pokud jsou všechny argumenty , NULLpak LEAST vrací NULL.

Porovnání argumentů postav se řídí pravidly Collation Precedence (Transact-SQL).

Následující typy nejsou podporovány pro porovnání v LEAST: varchar(max),varbinary(max) nebo nvarchar(max) s délkou přesahující 8 000 bajtů, kurzor, geometrie, geografie, obrazu, uživatelsky definovaných typech bez bajtů, ntext, tabulka, text a xml.

Datové typy varchar(max),varbinary(max) a nvarchar(max) jsou podporovány pro argumenty o velikosti 8 000 bajtů nebo méně a budou implicitně převedeny na varchar(n), varbinary(n) a nvarchar(n) před porovnáním.

Například varchar(max) může podporovat až 8 000 znaků při použití jednobajtové kódovací sady znaků a nvarchar(max) až 4 000 bajtových párů (za předpokladu kódování znaků UTF-16).

Examples

A. Vraťte minimální hodnotu ze seznamu konstant

Následující příklad vrací minimální hodnotu ze seznamu konstant, které jsou uvedeny.

Měřítko typu návratu je určeno měřítkem argumentu s datovým typem s nejvyšší prioritou.

SELECT LEAST('6.62', 3.1415, N'7') AS LeastVal;
GO

Tady je soubor výsledků.

LeastVal
-------
 3.1415

(1 rows affected)

B. Vraťte minimální hodnotu ze seznamu typů znaků

Následující příklad vrací minimální hodnotu ze seznamu znakových konstant, které je uvedeno.

SELECT LEAST('Glacier', N'Joshua Tree', 'Mount Rainier') AS LeastString;
GO

Tady je soubor výsledků.

LeastString
-------------
Glacier

(1 rows affected)

C. Vraťte minimální hodnotu ze seznamu sloupcových argumentů

Tento příklad vrací minimální hodnotu ze seznamu sloupcových argumentů a při porovnání ignoruje hodnoty NULL . Tento vzorek využívá databázi AdventureWorksLT , kterou lze rychle nainstalovat jako ukázkovou databázi pro novou Azure SQL databázi. Další informace naleznete v ukázkových databázích AdventureWorks .

SELECT P.Name,
    P.SellStartDate,
    P.DiscontinuedDate,
    PM.ModifiedDate AS ModelModifiedDate,
    LEAST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) AS EarliestDate
FROM SalesLT.Product AS P
INNER JOIN SalesLT.ProductModel AS PM
    ON P.ProductModelID = PM.ProductModelID
WHERE LEAST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) >= '2007-01-01'
    AND P.SellStartDate >= '2007-01-01'
    AND P.Name LIKE 'Touring %'
ORDER BY P.Name;

Tady je soubor výsledků. EarliestDate vybere nejmenší datovou hodnotu ze tří hodnot, přičemž ignoruje NULL.

Name                   SellStartDate           DiscontinuedDate    ModelModifiedDate       EarliestDate
---------------------- ----------------------- ------------------- ----------------------- -----------------------
Touring Pedal          2007-07-01 00:00:00.000 NULL                2009-05-16 16:34:29.027 2007-07-01 00:00:00.000
Touring Tire           2007-07-01 00:00:00.000 NULL                2007-06-01 00:00:00.000 2007-06-01 00:00:00.000
Touring Tire Tube      2007-07-01 00:00:00.000 NULL                2007-06-01 00:00:00.000 2007-06-01 00:00:00.000

(3 rows affected)

D. Použití LEAST s lokálními proměnnými

Tento příklad slouží LEAST k určení minimální hodnoty seznamu lokálních proměnných v predikátu klauzule WHERE .

CREATE TABLE dbo.Studies (
    VarX VARCHAR(10) NOT NULL,
    Correlation DECIMAL(4, 3) NULL
    );

INSERT INTO dbo.Studies
VALUES ('Var1', 0.2),
    ('Var2', 0.825),
    ('Var3', 0.61);
GO

DECLARE @PredictionA DECIMAL(2, 1) = 0.7;
DECLARE @PredictionB DECIMAL(3, 1) = 0.65;

SELECT VarX,
    Correlation
FROM dbo.Studies
WHERE Correlation < LEAST(@PredictionA, @PredictionB);
GO

Tady je soubor výsledků. Zobrazují se pouze hodnoty menší než 0,65.

VarX       Correlation
---------- -----------
Var1              .200
Var3              .610

(2 rows affected)

E. Použití LEAST se sloupci, konstantami a proměnnými

Tento příklad slouží LEAST k určení minimální hodnoty seznamu obsahujícího sloupce, konstanty a proměnné.

CREATE TABLE dbo.Studies (
    VarX VARCHAR(10) NOT NULL,
    Correlation DECIMAL(4, 3) NULL
    );

INSERT INTO dbo.Studies
VALUES ('Var1', 0.2),
    ('Var2', 0.825),
    ('Var3', 0.61);
GO

DECLARE @VarX DECIMAL(4, 3) = 0.59;

SELECT VarX,
    Correlation,
    LEAST(Correlation, 1.0, @VarX) AS LeastVar
FROM dbo.Studies;
GO

Tady je soubor výsledků.

VarX       Correlation           LeastVar
---------- --------------------- ---------------------
Var1       0.200                 0.200
Var2       0.825                 0.590
Var3       0.610                 0.590

(3 rows affected)