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
実行結果