web-dev-qa-db-ja.com

t-sqlでのnvarchar変数の照合順序のキャスト

Nvarchar変数の照合順序を変更する必要があります。 ドキュメントによる

(...)3. COLLATE句は、いくつかのレベルで指定できます。これらには以下が含まれます。

式の照合をキャストします。 COLLATE句を使用して、特定の照合に文字式を適用できます。文字リテラルと変数には、現在のデータベースのデフォルトの照合が割り当てられます。列参照には、列の定義照合が割り当てられます。式の照合については、「 照合の優先順位 (Transact-SQL)」を参照してください。

ただし、CAST()、CONVERT()、またはこの目的でDECLAREを使用した変数宣言を使用するための正しい構文を理解できません。

27
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
33
Lukasz Lysik

CASTまたはCONVERTは不要です。

SELECT N'abc' COLLATE French_CS_AS

照合順序を変更してもデータ型NVARCHARは変更されないため、これは不必要です。

16
nalply

2バイトから1バイト、またはその逆の文字エンコーディングを変更する場合は、CASTまたはConvertが必要です。これらの場合、それは不必要ではありません。

ソース列が2バイトの文字シーケンス(nchar、nvarchar)であり、選択射影がシングルバイト文字(char、varchar)である必要がある場合は、キャストと変換を指定する必要があります。型システム間のキャストの前に照合変換を適用します。

SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte
4

異なる照合順序の2つの列を比較または結合する場合、これが役立ちます。私の場合、2つの列を「SQL_Latin1_General_CP1_CI_AS」を使用して、もう1つを「Latin1_General_CP1_CI_AS」を使用して比較する必要がありました。

私はこれら2つを結合する場所でこのオプションを使用しました。

on A.Person = B.NAME collat​​e database_default

1
Xavier_prash