共用方式為


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 字元的複雜字串。

Transact-SQL 語法慣例

語法

UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )

言論

UNISTR 的主要優點包括:

  • 支援 Unicode 逸出序列UNISTR 可讓您使用逸出序列指定 Unicode 字元

  • 輸入類型彈性: 支援各種字元類型,例如 charncharvarchar,以及 nvarchar。 針對 charvarchar 數據類型,定序應該是有效的 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。 針對 charvarchar 數據類型,定序應該是有效的 UTF-8 定序。 您可以指定字串常值或 Unicode 或 UTF-16 字碼點值或兩者。 character_expression 支援長度 varchar(max)nvarchar(max)

N'unicode_escape_character'

單一字元,表示用戶定義的 Unicode 逸出序列。 如果未提供預設值為 \

傳回類型

長度和型別相依於輸入類型的字串值。

範例

A. 使用 UNISTR 與 NCHAR 函式

下列範例全都使用 函 UNISTR 式來執行將 Unicode 值轉換成字元串字元集的必要轉換,以顯示 Unicode 字元笑臉與開放式嘴。 如果輸入是 charvarchar 數據類型,資料庫定序必須是 UTF-8 定序

使用 UNISTRNCHAR

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
------------------------
はい