UNISTR (Transact-SQL)
適用於:Azure SQL 資料庫
UNISTR
可讓您在字串中指定字元的 Unicode 編碼值,以提供 Unicode 字串常值的支援。
UNISTR
傳回與輸入表達式對應的 Unicode 字元,如 Unicode 標準所定義。
Unicode 字元的逸出序列可以用 或 \xxxx
的形式\+xxxxxx
指定,其中 xxxx
是有效的UTF-16字碼點值,而 xxxxxx
是有效的Unicode字碼點值。 您可以在 Unicode 程式代碼圖表中查閱 Unicode 程式代碼點值。
與 NCHAR
等函式相比,UNISTR
提供更靈活、更全面的方法來處理 Unicode 字元。 例如,雖然 NCHAR
可以將單一 Unicode 值轉換成字元,UNISTR
處理多個 Unicode 值和逸出序列,讓您更輕鬆地處理包含各種 Unicode 字元的複雜字串。
語法
UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )
言論
UNISTR
的主要優點包括:
支援 Unicode 逸出序列:
UNISTR
可讓您使用逸出序列指定 Unicode 字元輸入類型 彈性:支援各種字元類型,例如 char 、nchar 、varchar ,以及 nvarchar。 針對 char 和 varchar 數據類型,定序應該是有效的 UTF-8 定序。 自定義逸出字元:您可以定義自定義逸出字元,以執行將 Unicode 值轉換成字元串字元集的必要轉換。
代碼頁支援
UNISTR
函式與舊版代碼頁不相容,這表示不支援使用非 Unicode 字元集的定序。 您可以使用下列查詢來識別具有舊版代碼頁的這些定序。
SELECT DISTINCT p.language,
p.codepage
FROM sys.fn_helpcollations() AS c
CROSS APPLY (VALUES (LEFT(c.name, CHARINDEX('_', c.name) - 1),
COLLATIONPROPERTY(c.name, 'codepage'))) AS p(language, codepage)
WHERE p.codepage NOT IN (
0 /* Unicode Only collation */,
65001 /* UTF-8 code page */
);
如需詳細資訊,請參閱 附錄 G DBCS/Unicode 對應資料表 和 附錄 H 代碼頁。
引數
'character_expression'
任何字元類型的運算式,例如 char、nchar、varchar 或 nvarchar。 針對 char 和 varchar 數據類型,定序應該是有效的 UTF-8 定序。 您可以指定字串常值或 Unicode 或 UTF-16 字碼點值或兩者。
character_expression
支援長度 varchar(max) 和 nvarchar(max)。
N'unicode_escape_character'
單一字元,表示用戶定義的 Unicode 逸出序列。 如果未提供預設值為 \
。
傳回類型
長度和型別相依於輸入類型的字串值。
範例
A. 使用 UNISTR 與 NCHAR 函式
下列範例全都使用 函 UNISTR
式來執行將 Unicode 值轉換成字元串字元集的必要轉換,以顯示 Unicode 字元笑臉與開放式嘴。 如果輸入是 char 或 varchar 數據類型,資料庫定序必須是 UTF-8 定序。
使用 UNISTR
與 NCHAR
:
SELECT N'Hello! ' + NCHAR(0xd83d) + NCHAR(0xde00);
這個範例也可以撰寫:
SELECT UNISTR(N'Hello! \D83D\DE00');
SELECT UNISTR(N'Hello! \+01F603');
結果集如下所示。
-----------
Hello! 😃
B. 搭配使用者定義逸出字元使用 UNISTR 函式
下列範例會使用 UNISTR
具有自定義逸出字元的 函式,將 Unicode 轉換成字串字元集的必要轉換。
SELECT UNISTR(N'ABC#00C0#0181#0187', '#');
結果集如下所示。
-----------
ABCÀƁƇ
C. 結合字串常值和 Unicode 字碼點,使用 UNISTR 函式
在下列範例中,UNISTR
搭配使用者定義逸出字元 ($
) 和具有UTF-8定序的 varchar 資料類型使用。 它會結合字串常值與 Unicode 程式代碼點值:
SELECT UNISTR('I $2665 Azure SQL.' COLLATE Latin1_General_100_CI_AS_KS_SC_UTF8, '$');
結果集如下所示。
------------------
I ♥ Azure SQL.
D. 針對UTF-8限制以外的字元使用UNISTR函式
如果您需要使用 UTF-8 以外的字元集,則必須使用 COLLATE
子句,將字元序列轉換成 UTF-8。 以下是範例:
SELECT UNISTR('\306F\3044' COLLATE Latin1_General_100_BIN2_UTF8) AS Yes_in_Japanese_Hiragana;
結果集如下所示。
Yes_in_Japanese_Hiragana
------------------------
はい