T-SQL で文字列内の各文字の UNICODE を調べる方法
T-SQL で文字列内の各文字の UNICODE を調べる
入力ミスや文字化けなどで、文字列に目で見て判断できない文字が入り込んでしまって、それが何か特定したいような時があります。
ここでは、T-SQL で文字列内の各文字の UNICODE を調べて、その文字が何かを特定する方法をご紹介します。
文字列内の各文字の UNICODE を調べるには、次のように UNICODE と SUBSTRING を使うことで、確認できます。
DECLARE @Value NVARCHAR(50) = N'Test 123'; SELECT @Value, UNICODE(SUBSTRING(@Value, 1, 1)) AS Unicode1, UNICODE(SUBSTRING(@Value, 2, 1)) AS Unicode2, UNICODE(SUBSTRING(@Value, 3, 1)) AS Unicode3, UNICODE(SUBSTRING(@Value, 4, 1)) AS Unicode4, UNICODE(SUBSTRING(@Value, 5, 1)) AS Unicode5, UNICODE(SUBSTRING(@Value, 6, 1)) AS Unicode6, UNICODE(SUBSTRING(@Value, 7, 1)) AS Unicode7, UNICODE(SUBSTRING(@Value, 8, 1)) AS Unicode8;
[ 実行結果 ]
SUBSTRING 関数を使って、一文字ずつ順番に取り出し、UNICODE 関数を使って、その文字の UNICODE を取得しています。
出てくるは数字は Decimal で、UNICODE の一覧表で調べると、それぞれ次のようになります。
Code | Decimal | Glyph | Description |
---|---|---|---|
U+0054 | 84 | T | Latin Capital Letter T |
U+0065 | 101 | e | Latin Small Letter e |
U+0073 | 115 | s | Latin Small Letter s |
U+0074 | 116 | t | Latin Small Letter t |
U+3000 | 12288 | Ideographic Space | |
U+0031 | 49 | 1 | Digit One |
U+0032 | 50 | 2 | Digit Two |
U+0033 | 51 | 3 | Digit Three |
これで、5 文字目が U+3000 の Ideographic Space(全角スペース)であることがわかりました。
T-SQL で全角スペースを半角スペースに置き換える
みつけた全角スペースを半角スペースに置き換えたい時は、次のようにできます。
DECLARE @Value NVARCHAR(50) = N'Test 123'; SELECT @Value, REPLACE(@Value, N' ', N' '), REPLACE(@Value, NCHAR(12288), N' ');
[ 実行結果 ]
SELECT 文の 2 行目では、REPLACE 関数を使って、全角スペース N' ' を半角スペースに N' ' に置き換えています。
3 行目では、REPLACE 関数を使って、NCHAR(12288) を半角スペースに N' ' に置き換えています。
NCHAR 関数は整数で渡したコードの UNICODE の文字を返す関数です。
どちらを使っても、全角スペースを半角スペースに置き換えることができます。
半角スペースは U+0020 / Decimal では 32 なので、N' ' の代わりに NCHAR(32) として、REPLACE(@Value, NCHAR(12288), NCHAR(32)) でも大丈夫です。
以上、T-SQL で文字列内の各文字の UNICODE を調べる方法をご紹介しました。