Aracılığıyla paylaş


Mantıksal fonksiyonlar - EN BÜYÜK (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database in Microsoft Fabric

Bu fonksiyon, bir veya daha fazla ifade listesinden maksimum değeri döndürür.

Transact-SQL söz dizimi kuralları

Sözdizimi

GREATEST ( expression1 [ , ...expressionN ] )

Arguments

ifade1, expressionN

Herhangi bir karşılaştırılabilir veri türüne ait virgülle ayrılmış ifadelerin listesi. Fonksiyon GREATEST en az bir argüman gerektirir ve en fazla 254 argümanı destekler.

Her ifade sabit, değişken, sütun adı veya fonksiyonu ve aritmetik, bit olarak ve dizi operatörlerinin herhangi bir kombinasyonu olabilir. Toplu fonksiyonlar ve skaler alt sorgular izinlidir.

Dönüş türleri

Fonksiyona aktarılan tipler kümesinden en yüksek önceliğe sahip veri tipini döndürür. Daha fazla bilgi için bkz. Veri Türü Önceliği (Transact-SQL).

Tüm argümanlar aynı veri tipine sahipse ve tür karşılaştırma için destekleniyorsa, GREATEST o tür döner.

Aksi takdirde, fonksiyon tüm argümanları karşılaştırmadan önce en yüksek öncelikli veri tipine dolaylı olarak dönüştürür ve bu tür dönüş tipi olarak kullanır.

Sayısal tipler için, dönüş türünün ölçeği en yüksek öncelik argümanı ile aynı olur ya da birden fazla argüman en yüksek öncelikli veri türüne sahipse en büyük ölçek olur.

Açıklamalar

Argüman listesindeki tüm ifadeler, karşılaştırılabilir ve en yüksek öncelikli argümanın veri tipine dolaylı olarak dönüştürülebilecek bir veri tipine sahip olmalıdır.

Tüm argümanların en yüksek öncelikli veri türüne örtük olarak dönüştürülmesi karşılaştırmadan önce gerçekleşir.

Argümanlar arasında örtük tür dönüşümü desteklenmezse, fonksiyon başarısız olur ve hata döndürür.

İmplicit ve açık dönüşüm hakkında daha fazla bilgi için bkz. Veri Tipi Dönüşümü (Veritabanı Motoru).

Eğer bir veya daha fazla argüman değilse NULL, NULL karşılaştırma sırasında argümanlar göz ardı edilir. Eğer tüm argümanlar ise NULL, döner GREATESTNULL.

Karakter argümanlarının karşılaştırılması, Collation Precedence (Transact-SQL) kurallarına uygundur.

Aşağıdaki tipler karşılaştırma için desteklenmezGREATEST: varchar(max), varbinary(max) veya nvarchar(max) 8.000 baytı aşan örnekler, imleç, geometri, coğrafya, görüntü, bayt sıralanmamış kullanıcı tanımlı tipler, ntext, tablo, metin ve xml.

varchar(max), varbinary(max) ve nvarchar(max) veri türleri, 8.000 bayt veya daha az argümanlar için desteklenir ve karşılaştırmadan önce dolaylı olarak varchar(n), varbinary(n) ve nvarchar(n)'ye dönüştürülür.

Örneğin, varchar(max) tek baytlı kodlama karakter seti kullanıldığında 8.000 karaktere kadar destekleyebilir ve nvarchar(max) ise 4.000 bayt çiftini destekleyebilir (UTF-16 karakter kodlaması varsayarsa).

Örnekler

A. Bir sabitler listesinden maksimum değeri döndür

Aşağıdaki örnek, sağlanan sabitler listesinden maksimum değeri geri getirir.

Dönüş türünün ölçeği, en yüksek öncelikli veri tipine sahip argümanın ölçeğine göre belirlenir.

SELECT GREATEST('6.62', 3.1415, N'7') AS GreatestVal;
GO

Sonuç kümesi aşağıdadır.

GreatestVal
--------
  7.0000

(1 rows affected)

B. Karakter sabitleri listesinden maksimum değeri döndür

Aşağıdaki örnek, sağlanan karakter sabitleri listesinden maksimum değeri geri döndürür.

SELECT GREATEST('Glacier', N'Joshua Tree', 'Mount Rainier') AS GreatestString;
GO

Sonuç kümesi aşağıdadır.

GreatestString
-------------
Mount Rainier

(1 rows affected)

C. Bir sütun argümanı listesinden maksimum değeri döndür

Bu örnek, sütun argümanları listesinden maksimum değeri döndürür ve karşılaştırma sırasında değerleri NULL görmezden gelir. Bu örnek, yeni bir Azure SQL Veritabanı için örnek veritabanı olarak hızlıca kurulabilen veritabanını AdventureWorksLT kullanır. Daha fazla bilgi için bkz. AdventureWorks örnek veritabanları.

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;

Sonuç kümesi aşağıdadır. LatestDate üç değerden en büyük tarih değerini seçer, 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. Yerel değişkenlerle kullanım GREATEST

Bu örnek, bir WHERE cümlenin önlemi içindeki yerel değişkenler listesinin maksimum değerini belirlemek için kullanılırGREATEST.

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

Sonuç kümesi aşağıdadır. Yalnızca 0.7'den büyük değerler gösterilir.

VarX       Correlation
---------- -----------
Var2              .825

(1 rows affected)

E. Sütunlar, sabitler ve değişkenlerle kullanım GREATEST

Bu örnek, sütunlar, sabitler ve değişkenleri içeren karışık bir listenin maksimum değerini belirlemek için kullanılır GREATEST .

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

Sonuç kümesi aşağıdadır.

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

(3 rows affected)

Sonraki Adımlar