次の方法で共有


論理関数 - LEAST (Transact-SQL)

適用対象: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス

この関数は、1 つまたは複数の式のリストから最小値を返します。

Transact-SQL 構文表記規則

構文

LEAST ( expression1 [ , ...expressionN ] )

引数

expression1, expressionN

比較可能なデータ型のコンマ区切りの式のリスト。 LEAST 関数には、少なくとも 1 つの引数が必要です。また、254 個を超える引数はサポートされていません。

それぞれの式は、定数、変数、列名または関数、そして算術演算子、ビット演算子、文字列演算子の組み合わせにすることができます。 集計関数とスカラーのサブクエリを使用することができます。

戻り値の型

関数に渡される一連の型の中から最も優先順位の高いデータ型を返します。 詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。

すべての引数のデータ型が同じで、その型の比較がサポートされている場合、LEAST はその型を返します。

それ以外の場合、関数は、比較の前に、すべての引数を最も優先順位の高いデータ型に暗黙的に変換し、この型を戻り値の型として使用します。

数値型の場合、戻り値の型のスケールは、最も優先順位の高い引数と同じになります。または、最も優先順位の高いデータ型の引数が複数ある場合は、最大のスケールになります。

解説

引数リスト内のすべての式は、比較可能なデータ型である必要があり、最も優先順位の高い引数のデータ型に暗黙的に変換できます。

すべての引数の、最も優先順位の高いデータ型への暗黙的な変換は、比較の前に行われます。

引数間の暗黙的な型変換がサポートされていない場合、関数は失敗し、エラーが返されます。

明示的な、および暗黙的な変換について詳しくは、「データ型の変換 (データベース エンジン)」を参照してください。

1 つ以上の引数が NULL でない場合、比較時に NULL 引数が無視されます。 すべての引数が NULL である場合、LEASTNULL を返します。

文字引数の比較は、「照合順序の優先順位 (Transact-SQL)」の規則に従います。

次の型は LEAST の比較ではサポートされていません: 8,000 バイトを超える varchar(max)varbinary(max)、または nvarchar(max)、cursor、geometrygeographyimage、バイト順序が指定されていないユーザー定義型、ntext、table、textxml

varchar(max)varbinary(max)、および nvarchar(max) の各データ型は、8,000 バイト以下の引数でサポートされています。また、比較の前に、それぞれ varchar(n)varbinary(n)nvarchar(n) に暗黙的に変換されます。

たとえば、varchar(max) は、1 バイト エンコード文字セットを使用している場合に最大 8,000 文字をサポートし、nvarchar(max) は最大 4,000 バイトペアをサポートできます (UTF-16 文字エンコードを想定)。

A. 定数の一覧から最小値を返す

次の例では、入力される定数のリストから最小値が返されます。

戻り値の型のスケールは、最も優先順位の高いデータ型の引数のスケールによって決まります。

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

結果セットは次のとおりです。

LeastVal
-------
 3.1415

(1 rows affected)

B. 文字型のリストから最小値を返す

次の例では、入力される文字定数のリストから最小値が返されます。

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

結果セットは次のとおりです。

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

(1 rows affected)

C: 列引数のリストから最小値を返す

この例では、列引数のリストから最小値が返され、比較中の NULL 値は無視されます。 このサンプルでは、AdventureWorksLT データベースを使用します。これは、新しい Azure SQL データベースのサンプル データベースとしてすばやくインストールできます。 詳細については、「AdventureWorks sample databases」 (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;

結果セットは次のとおりです。 EarliestDate では、3 つの値のうち最小の日付値が選択され、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. ローカル変数で LEAST を使う

この例では、LEAST を使用して、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

結果セットは次のとおりです。 0.65 未満の値だけが表示されます。

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

(2 rows affected)

E. 列、定数、変数で LEAST を使う

この例では、LEAST を使用して、列、定数、および変数を含むリストの最小値を決定します。

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

結果セットは次のとおりです。

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

(3 rows affected)