差分を定義するには、まずメトリックを定義する必要があります。
それはRGBですので、あなたは、単に
SQRT((R ユークリッドノルム/距離を使用することができるので、それは、3次元空間での - R) +(G - G ) +(B - B ))
あなただけの、また、あなただけの比較をやっているので、あなたは、実効値を必要としないすべてのコンポーネント(R、G、B)を抽出し、数
,CONVERT(int, CONVERT(varbinary, SUBSTRING(COL_Hex, 1, 2), 2)) AS R
,CONVERT(int, CONVERT(varbinary, SUBSTRING(COL_Hex, 3, 2), 2)) AS G
,CONVERT(int, CONVERT(varbinary, SUBSTRING(COL_Hex, 5, 2), 2)) AS B
に変換する必要があります相対的なもの。だから、平方根の計算をスキップすることができます。
次に、距離の昇順で注文する場合は、最初のタプルを取得するだけです。
だから、このように、意味:
SELECT
COL_Number
,COL_Hex
,R2
,G2
,B2
,R1
,G1
,B1
-- Comparisons are relative - SQRT not necessary
,--SQRT(
POWER((r1 - r2), 2) + POWER((g1 - g2), 2) + POWER((b1 - b2), 2)
--)
AS dist
FROM
(
SELECT
COL_Number
,COL_Hex
,CONVERT(int, CONVERT(varbinary, SUBSTRING(COL_Hex, 1, 2), 2)) AS R2
,CONVERT(int, CONVERT(varbinary, SUBSTRING(COL_Hex, 3, 2), 2)) AS G2
,CONVERT(int, CONVERT(varbinary, SUBSTRING(COL_Hex, 5, 2), 2)) AS B2
,CONVERT(int, CONVERT(varbinary, SUBSTRING(ColorToEvaluate, 1, 2), 2)) AS R1
,CONVERT(int, CONVERT(varbinary, SUBSTRING(ColorToEvaluate, 3, 2), 2)) AS G1
,CONVERT(int, CONVERT(varbinary, SUBSTRING(ColorToEvaluate, 5, 2), 2)) AS B1
FROM T_SYS_ColorToHex
CROSS JOIN
(
SELECT 'FF00FF' AS ColorToEvaluate
) AS tParam
) AS t
ORDER BY dist
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
あなたはすべての可能な値を持っていない色に専用のデータベースを持っていますなぜですか? – SaggingRufus
最も近いのはどちらですか? '017FFF'または' 007FFE'ですか? –
@SaggingRufus:はい、整数と256色を使用する第三者アプリケーションがあります。 – User1