共用方式為


VECTOR_DISTANCE (Transact-SQL)

適用於: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

VECTOR_DISTANCE 式會使用指定的距離計量來計算兩個向量之間的距離。 向量距離一律精確,而且不會使用任何向量索引,即使可用也一樣。 若要使用向量索引,因此執行近似向量搜尋,您必須使用 VECTOR_SEARCH 函式。 若要深入瞭解向量索引和向量搜尋的運作方式,以及精確搜尋和近似搜尋之間的差異,請參閱 SQL 資料庫引擎中的向量搜尋和向量索引

Note

VECTOR_DISTANCE 可在 Azure SQL 受控執行個體中使用 SQL Server 2025一律up-to日期更新原則

Syntax

Transact-SQL 語法慣例

VECTOR_DISTANCE ( distance_metric , vector1 , vector2 )

Arguments

distance_metric

字串,其名稱為要用來計算兩個指定向量之間的距離。 支援下列距離計量:

  • cosine - 餘弦距離
  • euclidean - Euclidean 距離
  • dot - (負數) 點產品

向量1

評估為 向量 數據類型的表達式。

向量2

評估為 向量 數據類型的表達式。

距離指標

Metric Description Range Examples
cosine 餘弦值 (角度) 距離 [0, 2] 0:相同的向量
2:相反向量
euclidean 歐幾里得距離 [0, +∞] 0:相同的向量
dot 以點產品為基礎的距離指示,
藉由計算 點乘積來取得
[-∞, +∞] 較小的數位表示更類似的向量

返回值

此函式會傳回純量 浮點 數,代表使用指定距離計量來表示兩個向量之間的距離。

如果 distance_metric 不是有效的計量,且提供的向量不是 向量資料類型,則會傳回錯誤。

Examples

範例中使用的資料庫詳細資料可以在 GitHub 上找到: 下載並匯入具有向量內嵌的維基百科文章

範例假設有一wikipedia_articles個名為的數據表,其類型title_vector為 數據行vector,其會儲存維琪百科文章的標題內嵌。 title_vector 假設是使用嵌入模型產生的嵌入,例如 text-embedding-ada-002text-embedding-3-small或 ,它傳回具有 1,536 個維度的向量。

如需更多範例,包括端對端解決方案,請移至 Azure SQL Database 向量搜尋範例 GitHub 存放庫

A。 從 JSON 陣列建立向量

下列範例會從具有 JSON 陣列的字串建立具有三個維度的向量。

DECLARE @v1 AS VECTOR(2) = '[1,1]';
DECLARE @v2 AS VECTOR(2) = '[-1,-1]';

SELECT VECTOR_DISTANCE('euclidean', @v1, @v2) AS euclidean,
       VECTOR_DISTANCE('cosine', @v1, @v2) AS cosine,
       VECTOR_DISTANCE('dot', @v1, @v2) AS negative_dot_product;

B. 根據標題返回前 10 名類似文章

下列範例會根據標題向量之間的餘弦距離,傳回前 10 個最類似文章的文章。

DECLARE @v AS VECTOR(1536);

SELECT @v = title_vector
FROM [dbo].[wikipedia_articles]
WHERE title = 'Alan Turing';

SELECT TOP (10) id,
                title,
                VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM [dbo].[wikipedia_articles]
ORDER BY distance;

C. 根據特定向量距離傳回類似文章

下列範例會根據標題向量之間的餘弦距離,將所有類似的文章傳回給指定文章,只選取距離小於 0.3 的標題。

DECLARE @v AS VECTOR(1536);

SELECT @v = title_vector
FROM [dbo].[wikipedia_articles]
WHERE title = 'Alan Turing';

SELECT id,
       title,
       VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM [dbo].[wikipedia_articles]
WHERE VECTOR_DISTANCE('cosine', @v, title_vector) < 0.3
ORDER BY distance;