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値、バイナリ形式)と、それぞれの実装例を紹介しました。
演習問題で理解を深め、ぜひ自身のプロジェクトに活用してください。