Natural Sort(自然なアルファベット順)を Microsoft SQL 2005 で実現する方法
Natural Sort(自然なアルファベット順)を Microsoft SQL Server 2005 で実現する方法
Natural Sort は、数字や記号を文字列として解釈し、自然な順序でソートするものです。例えば、以下の文字列:
"100"
"2"
"11"
"20"
デフォルトのソート順では、"100"、"11"、"2"、"20" の順序になります。しかし、Natural Sort では、"2"、"11"、"20"、"100" の順序になります。
Natural Sort を実現する方法
SQL Server 2005 で Natural Sort を実現するには、いくつかの方法があります。
T-SQL 関数を使用する
以下の T-SQL 関数を使用して、Natural Sort を実現できます。
CREATE FUNCTION [dbo].[NaturalSort]
(
@Input VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Result VARCHAR(MAX)
SET @Result = REPLACE(@Input, '[^0-9a-zA-Z]', '')
RETURN @Result
END
この関数は、文字列中の数字や記号をすべて削除し、残りの文字列を自然な順序でソートします。
ORDER BY 句で COLLATE を使用する
以下の方法で、ORDER BY 句で COLLATE を使用して Natural Sort を実現できます。
SELECT *
FROM Table
ORDER BY Column COLLATE Latin1_General_CI_AS
Latin1_General_CI_AS
は、大文字と小文字を区別せず、数字や記号を自然な順序でソートするロケールです。
Derived Column を使用する
SELECT *,
(
SELECT REPLACE(Column, '[^0-9a-zA-Z]', '')
) AS NaturalSort
FROM Table
ORDER BY NaturalSort
この方法では、まず Derived Column で数字や記号をすべて削除し、その結果に基づいてソートを行います。
Natural Sort のサンプルコード
CREATE FUNCTION [dbo].[NaturalSort]
(
@Input VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Result VARCHAR(MAX)
SET @Result = REPLACE(@Input, '[^0-9a-zA-Z]', '')
RETURN @Result
END
SELECT *
FROM Table
ORDER BY [dbo].[NaturalSort](Column)
SELECT *
FROM Table
ORDER BY Column COLLATE Latin1_General_CI_AS
SELECT *,
(
SELECT REPLACE(Column, '[^0-9a-zA-Z]', '')
) AS NaturalSort
FROM Table
ORDER BY NaturalSort
INSERT INTO Table (Column)
VALUES
('100'),
('2'),
('11'),
('20')
結果
Column
-------
2
11
20
100
上記のように、Natural Sort を使用することで、数字や記号を含む文字列を自然な順序でソートすることができます。
Natural Sort を実現する他の方法
CLR ルーチンを使用する
C# などの .NET 言語を使用して CLR ルーチンを作成し、Natural Sort ロジックを実装することができます。CLR ルーチンは、T-SQL 関数のように呼び出すことができます。
外部ライブラリを使用する
Natural Sort を実装するオープンソースライブラリがいくつか存在します。これらのライブラリを SQL Server に組み込み、Natural Sort 機能を利用することができます。
ビューを使用する
Natural Sort ロジックをビューに記述することで、SELECT クエリで簡単に Natural Sort を実行することができます。
例:
CREATE VIEW vw_NaturalSort
AS
SELECT *,
(
SELECT REPLACE(Column, '[^0-9a-zA-Z]', '')
) AS NaturalSort
FROM Table
SELECT *
FROM vw_NaturalSort
ORDER BY NaturalSort
注意事項
- CLR ルーチンを使用する場合、SQL Server の CLR インテグレーションが有効になっている必要があります。
- 外部ライブラリを使用する場合、ライブラリのバージョンと SQL Server のバージョンが互換性があることを確認する必要があります。
sql-server sql-server-2005 sorting