Cast collation di variabili nvarchar in t-sql
-
06-07-2019 - |
Domanda
Devo cambiare le regole di confronto di una variabile nvarchar. Per documentazione :
(...) 3. È possibile specificare la clausola COLLATE a più livelli. Questi includono il seguenti:
Lanciare le regole di confronto di un espressione. Puoi usare COLLATE clausola per applicare un'espressione di carattere a un certo confronto. Personaggio vengono assegnati valori letterali e variabili le regole di confronto predefinite della corrente Banca dati. I riferimenti alle colonne sono assegnato la definizione di confronto di la colonna. Per la raccolta di un espressione, vedi Precedenza di confronto (Transact-SQL).
Tuttavia non riesco a capire la sintassi corretta per l'uso di CAST (), CONVERT () o la dichiarazione di variabili con DECLARE a questo scopo.
Soluzione
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
Altri suggerimenti
CAST
o CONVERT
è superfluo!
SELECT N'abc' COLLATE French_CS_AS
È superfluo perché il semplice cambiamento delle regole di confronto non modifica il tipo di dati NVARCHAR
.
Se si cambia tra 2 e 1 byte, o viceversa, le codifiche dei caratteri sono necessarie CAST o Convert. In questi casi non è superfluo.
Quando la colonna di origine è una sequenza di caratteri a 2 byte (nchar, nvarchar) e la proiezione della selezione deve essere un carattere a byte singolo (char, varchar), è necessario specificare il cast e la conversione. Applica la conversione delle regole di confronto prima del casting tra i sistemi di tipi.
SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte
Se si desidera confrontare o unire due colonne di regole di confronto diverse, ciò potrebbe essere d'aiuto. Nel mio caso ho dovuto confrontare due colonne con una usando "SQL_Latin1_General_CP1_CI_AS" e l'altra usando "Latin1_General_CP1_CI_AS".
Ho semplicemente usato questa opzione quando mi unisco a questi due.
su A.Person = B.NAME fascicola database_default