[SQL Server] 文字列から全角データが含まれているかチェック

inno
2014-07-10 19:00 9299 1
MS-SQL / SQL Server
文字列から全角データが含まれているかチェック

文字列に全角が含まれているかチェックする関数(FUNCTION)を紹介したいと思います。

全角の文字列を半角に変換する方法は下記のリンクをご参考ください。

戻り値はbit型のデータです。

0 : 全角含まれてない。
1 : 全角ふくまれている。

まず、関数を作成しましょう。

CREATE FUNCTION [dbo].[fnCheckZenkaku]
(
@StrVal nvarchar(100)
)
RETURNS BIT
BEGIN

DECLARE @Result bit
DECLARE @i int
DECLARE @UniCode int
SET @Result = 0
SET @i = 1
WHILE (@i <= LEN(@StrVal))
BEGIN
SET @UniCode = UNICODE(SUBSTRING(@StrVal,@i,1))
IF (@UniCode = 12288 OR ((@UniCode >= 65280) AND (@UniCode <= 65519)))
BEGIN
SET @Result = 1
BREAK
END
SET @i = @i + 1
END
RETURN @Result
END

使い方法としては下記のように使えます。

半角データの場合
SELECT dbo.fnCheckZenkaku(N'A')

実行結果


全角データの場合
SELECT dbo.fnCheckZenkaku(N'A')

実行結果


これをテーブルから検索する時に使うと下記のように使えます。
テストの為に一時テーブルを作成してデータを入れてテストしましょう。

-- #### テーブル作成
CREATE TABLE #TempData
(
Idx int
,StrVal nvarchar(20)
)
GO

-- #### データ登録
INSERT INTO #TempData (Idx, StrVal)
SELECT 1, N'abcdefg' UNION ALL
SELECT 2, N'bcdefgh' UNION ALL
SELECT 3, N'jk39chj3' UNION ALL
SELECT 4, N'kdi89320' UNION ALL
SELECT 5, N'df_elf023' UNION ALL
SELECT 6, N'bjnmrj93'

データ登録まで終わったら下記のSQLを利用して全角データを確認してみましょう。

SELECT Idx, StrVal, dbo.fnCheckZenkaku(StrVal) IsCheckZenkaku
FROM #TempData

実行結果


「IsCheckZenkaku」カラムのデータが「1」の場合が全角が含まれているデータです。
全角が含まれているデータのみ検索したい時は下記のように使えます。

SELECT Idx, StrVal
FROM #TempData
WHERE dbo.fnCheckZenkaku(StrVal) = 1

実行結果

コメント

みゃあ 2016年 02月 25日 (14:05)
この内容では全角を網羅していません。Unicodeが足りてません。
漢字や句読点や特殊記号はアウトです。全部Unicodeで判定すること自体に無理があると思われます。
unicodeではなくて単純に一文字ずつバイト数で判定することをお勧めします。