SQL Serverで色データを格納する列を作成してみよう!

Webアプリケーションやデスクトップアプリケーションで色を扱う際、データベースにも色情報を保存する必要があります。

SQL Serverでは、色を16進数(HEX)やRGBなどの形式で格納できます。

本記事では、初心者向けに「SQL Serverのテーブルに色データを格納する列を作成する方法」を解説します。

前提条件

  • SQL Serverの基本的な操作(テーブル作成、データ型の理解)ができること
  • SQL Server Management Studio(SSMS)などのツールを使用できること

色データの代表的な形式

RGB(Red/Green/Blue)
  • 0~255の整数で、赤・緑・青の光の強さを指定
  • 例:RGB(255, 0, 0)は純粋な赤
HEX(16進数)
  • #RRGGBBの文字列形式
  • 例:#FF0000は赤

カラム設計パターン

CHAR(7)でHEX文字列を保存

‘#’を含めた7文字の固定長文字列として保存する。

CREATE TABLE dbo.Colors (
    ColorId INT IDENTITY(1,1) PRIMARY KEY,
    ColorName NVARCHAR(50) NOT NULL,
    HexCode CHAR(7) NOT NULL -- 例:'#RRGGBB'
);
3つのTINYINT列でRGB値を保存

TINYINT型は0~255を扱えるためRGBに最適です。

CREATE TABLE dbo.Colors (
    ColorId INT IDENTITY(1,1) PRIMARY KEY,
    ColorName NVARCHAR(50) NOT NULL,
    Red TINYINT NOT NULL,
    Green TINYINT NOT NULL,
    Blue TINYINT NOT NULL
);
VARBINARY(3)でバイナリ形式を保存
CREATE TABLE dbo.Colors (
    ColorId INT IDENTITY(1,1) PRIMARY KEY,
    ColorName NVARCHAR(50) NOT NULL,
    RGB VARBINARY(3) NOT NULL -- 3バイトでR, G, Bを保存
);

実例:HEX形式で保存

テーブル作成
CREATE TABLE dbo.ProductColors (
    ProductColorId INT IDENTITY(1,1) PRIMARY KEY,
    ProductId INT NOT NULL,
    ColorName NVARCHAR(50) NOT NULL,
    HexCode CHAR(7) NOT NULL -- 例:'#FF5733'
);
データ挿入例
INSERT INTO dbo.ProductColors (ProductId, ColorName, HexCode)
VALUES
(1, 'Bright Red', '#FF0000'),
(1, 'Ocean Blue', '#0077BE'),
(2, 'Mint Green', '#98FF98');
データ参照例
SELECT ProductColorId, ProductId, ColorName, HexCode
FROM dbo.ProductColors
WHERE ProductId = 1;

実例:RGB形式で保存

テーブル作成
CREATE TABLE dbo.UserThemeColors (
    ThemeColorId INT IDENTITY(1,1) PRIMARY KEY,
    UserId INT NOT NULL,
    RedValue TINYINT NOT NULL,
    GreenValue TINYINT NOT NULL,
    BlueValue TINYINT NOT NULL
);
データ挿入例
INSERT INTO dbo.UserThemeColors (UserId, RedValue, GreenValue, BlueValue)
VALUES
(100, 255, 255, 0),   -- Yellow
(101, 128, 0, 128);   -- Purple
HEXへの変換クエリ
SELECT
    ThemeColorId,
    UserId,
    CONCAT('#',
       RIGHT('0' + CONVERT(VARCHAR(2), CONVERT(VARBINARY(1), RedValue), 2), 2),
       RIGHT('0' + CONVERT(VARCHAR(2), CONVERT(VARBINARY(1), GreenValue), 2), 2),
       RIGHT('0' + CONVERT(VARCHAR(2), CONVERT(VARBINARY(1), BlueValue), 2), 2)
    ) AS HexCode
FROM dbo.UserThemeColors;

演習問題

以下の課題に取り組んでみましょう。

課題1:テーブルの作成

PaintSwatchesというテーブルを、SWATCH_ID(主キー、自動採番)、SWATCH_NAME(色名、可変長文字列)、RGB(VARBINARY(3))の3列で作成してください。

課題2:データの挿入

以下のスウォッチを挿入してください。

  • スウォッチ名:”Sunset Orange”、RGB:RGB(255, 94, 77)
  • スウォッチ名:”Forest Green”、RGB:RGB(34, 139, 34)
課題3:HEX変換ビューの作成

vw_PaintSwatchesHexというビューを作成し、SWATCH_ID、SWATCH_NAME、HEX_CODE(変換後の#RRGGBB形式)を表示してください。

解答例

1. テーブル作成
CREATE TABLE dbo.PaintSwatches (
    SwatchId INT IDENTITY(1,1) PRIMARY KEY,
    SwatchName NVARCHAR(100) NOT NULL,
    RGB VARBINARY(3) NOT NULL
);
2. データ挿入
INSERT INTO dbo.PaintSwatches (SwatchName, RGB)
VALUES
('Sunset Orange', 0xFF5E4D),
('Forest Green',  0x228B22);
3. ビュー作成
CREATE VIEW dbo.vw_PaintSwatchesHex AS
SELECT
    SwatchId,
    SwatchName,
    CONCAT('#',
        SUBSTRING(sys.fn_varbintohexstr(RGB), 3, 2),
        SUBSTRING(sys.fn_varbintohexstr(RGB), 5, 2),
        SUBSTRING(sys.fn_varbintohexstr(RGB), 7, 2)
    ) AS HexCode
FROM dbo.PaintSwatches;

まとめ

本記事では、SQL Serverで色データを格納する主な3つの方法(HEX文字列、RGB値、バイナリ形式)と、それぞれの実装例を紹介しました。

演習問題で理解を深め、ぜひ自身のプロジェクトに活用してください。