Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do: SQL Server 2022 (16.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL database in Microsoft Fabric
Funkcja ta zwraca maksymalną wartość z listy jednego lub więcej wyrażeń.
Transact-SQL konwencje składni
Składnia
GREATEST ( expression1 [ , ...expressionN ] )
Arguments
wyraz1, wyrażenieN
Lista wyrażeń oddzielonych przecinkami dowolnego porównywalnego typu danych. Funkcja wymaga GREATEST co najmniej jednego argumentu i obsługuje nie więcej niż 254 argumenty.
Każde wyrażenie może być stałą, zmienną, nazwą kolumny lub funkcją oraz dowolną kombinacją operatorów arytmetycznych, bitowych i ciągowych. Dozwolone są funkcje agregacyjne oraz podzapytania skalarne.
Typy zwracane
Zwraca typ danych o najwyższym przykładzie spośród zestawu typów przekazanych funkcji. Aby uzyskać więcej informacji, zobacz pierwszeństwo typu danych (Transact-SQL).
Jeśli wszystkie argumenty mają ten sam typ danych i typ jest wspierany do porównania, GREATEST zwraca ten typ.
W przeciwnym razie funkcja domyślnie przekształci wszystkie argumenty na typ danych o najwyższym pierwszeństwie przed porównaniem i użyje tego typu jako typu zwrotu.
Dla typów numerycznych skala typu zwrotu będzie taka sama jak argument o najwyższym precedensie, lub największa skala, jeśli więcej niż jeden argument dotyczy najwyższego typu danych o najwyższym precedensie.
Uwagi
Wszystkie wyrażenia na liście argumentów muszą mieć typ danych porównywalny i który można domyślnie przekształcić na typ danych argumentu o najwyższym pierwszeństwie.
Przed porównaniem następuje niejawna konwersja wszystkich argumentów na typ danych o najwyższym precedensie.
Jeśli nie jest obsługiwana niejawna konwersja typów między argumentami, funkcja zawiodła i zwróciła błąd.
Więcej informacji na temat konwersji ukrytej i jawnej można znaleźć w artykule Konwersja typów danych (Database Engine).
Jeśli jeden lub więcej argumentów nie NULLjest , to NULL argumenty są ignorowane podczas porównania. Jeśli wszystkie argumenty są , NULLto GREATEST zwraca NULL.
Porównywanie argumentów charakterowych opiera się na zasadach Precedencji Kolacji (Transact-SQL).
Następujące typy nie są obsługiwane do porównania w GREATEST: varchar(max),varbinary(max) lub nvarchar(max) przekraczających 8 000 bajtów, kursorach, geometrii, geografii, obrazach, typach zdefiniowanych przez użytkownika nieuporządkowanych bajtami, ntext, tabeli, tekstie oraz xml.
Typy danych varchar(max),varbinary(max) i nvarchar(max) są obsługiwane dla argumentów o rozmiarze 8 000 bajtów lub mniejszych i zostaną niejawnie przekształcone odpowiednio w varchar(n),varbinary(n) i nvarchar(n) przed porównaniem.
Na przykład varchar(max) może obsługiwać do 8 000 znaków przy użyciu zestawu znaków kodujących jednobajtowo, a nvarchar(max) może obsługiwać do 4 000 par bajtów (zakładając kodowanie znaków UTF-16).
Przykłady
A. Zwróć maksymalną wartość z listy stałych
Poniższy przykład zwraca maksymalną wartość z listy stałych, która jest dostępna.
Skala typu zwrotu jest określana przez skalę argumentu o najwyższym przykładzie danych o najwyższym prezencji.
SELECT GREATEST('6.62', 3.1415, N'7') AS GreatestVal;
GO
Oto zestaw wyników.
GreatestVal
--------
7.0000
(1 rows affected)
B. Zwróć maksymalną wartość z listy stałych znaków
Poniższy przykład zwraca maksymalną wartość z listy stałych znaków, która jest dostępna.
SELECT GREATEST('Glacier', N'Joshua Tree', 'Mount Rainier') AS GreatestString;
GO
Oto zestaw wyników.
GreatestString
-------------
Mount Rainier
(1 rows affected)
C. Zwróć maksymalną wartość z listy argumentów kolumnowych
Ten przykład zwraca maksymalną wartość z listy argumentów kolumn i ignoruje NULL wartości podczas porównania. Ten przykład wykorzystuje bazę AdventureWorksLT danych, którą można szybko zainstalować jako przykładową bazę danych dla nowej bazy Azure SQL. Aby uzyskać więcej informacji, zobacz przykładowe bazy danych AdventureWorks .
SELECT P.Name,
P.SellStartDate,
P.DiscontinuedDate,
PM.ModifiedDate AS ModelModifiedDate,
GREATEST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) AS LatestDate
FROM SalesLT.Product AS P
INNER JOIN SalesLT.ProductModel AS PM
ON P.ProductModelID = PM.ProductModelID
WHERE GREATEST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) >= '2007-01-01'
AND P.SellStartDate >= '2007-01-01'
AND P.Name LIKE 'Touring %'
ORDER BY P.Name;
Oto zestaw wyników.
LatestDate wybiera największą wartość datową spośród trzech wartości, ignorując NULL.
Name SellStartDate DiscontinuedDate ModelModifiedDate LatestDate
-------------------- ----------------------- ------------------- ----------------------- -----------------------
Touring Pedal 2007-07-01 00:00:00.000 NULL 2009-05-16 16:34:29.027 2009-05-16 16:34:29.027
Touring Tire 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-07-01 00:00:00.000
Touring Tire Tube 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-07-01 00:00:00.000
(3 rows affected)
D. Zastosowanie GREATEST z lokalnymi zmiennymi
Ten przykład służy GREATEST do określenia maksymalnej wartości listy zmiennych lokalnych w obrębie predykatu klauzuli 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 > GREATEST(@PredictionA, @PredictionB);
GO
Oto zestaw wyników. Wyświetlane są tylko wartości większe niż 0,7.
VarX Correlation
---------- -----------
Var2 .825
(1 rows affected)
E. Użycie GREATEST z kolumnami, stałymi i zmiennymi
Ten przykład służy GREATEST do określenia maksymalnej wartości mieszanej listy zawierającej kolumny, stałe i zmienne.
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,
GREATEST(Correlation, 0, @VarX) AS GreatestVar
FROM dbo.Studies;
GO
Oto zestaw wyników.
VarX Correlation GreatestVar
---------- --------------------- ---------------------
Var1 0.200 0.590
Var2 0.825 0.825
Var3 0.610 0.610
(3 rows affected)