適用於: SQL Server 2025 (17.x)
Azure SQL Database Azure
SQL Managed Instance
SQL database in Microsoft Fabric
函 VECTOR_DISTANCE 式會使用指定的距離計量來計算兩個向量之間的距離。 向量距離一律精確,而且不會使用任何向量索引,即使可用也一樣。 若要使用向量索引,因此執行近似向量搜尋,您必須使用 VECTOR_SEARCH 函式。 若要深入瞭解向量索引和向量搜尋的運作方式,以及精確搜尋和近似搜尋之間的差異,請參閱 SQL 資料庫引擎中的向量搜尋和向量索引。
Note
VECTOR_DISTANCE 可在 Azure SQL 受控執行個體中使用 SQL Server 2025 或 一律up-to日期更新原則。
Syntax
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;