在t-sql中转换nvarchar变量的归类

问题描述 投票:27回答:4

我需要更改nvarchar变量的排序规则。 By documentation

(...)3。可以在多个级别指定COLLATE子句。这些包括以下内容:

转换表达式的排序规则。您可以使用COLLATE子句将字符表达式应用于某个排序规则。为字符文字和变量分配当前数据库的默认排序规则。为列引用分配列的定义排序规则。有关表达式的排序规则,请参阅Collation Precedence(Transact-SQL)。

但是,为了这个目的,我无法弄清楚使用CAST(),CONVERT()或使用DECLARE的变量声明的正确语法。

sql tsql sql-server-2008 collation string-comparison
4个回答
32
投票
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

16
投票

CASTCONVERT是多余的!

SELECT N'abc' COLLATE French_CS_AS

这是多余的,因为只更改排序规则不会更改数据类型NVARCHAR


4
投票

如果要在2到1个字节之间进行更改,或者在ver-sa-sa字符编码之间进行更改,则需要进行CAST或转换。在这些情况下,这不是多余的。

当源列是2字节字符序列(nchar,nvarchar)并且选择投影需要是单字节字符(char,varchar)时,应指定强制转换和转换。在类型系统之间的转换之前应用归类转换。

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

1
投票

如果您想比较或加入两列不同的排序规则,这可能有所帮助。在我的情况下,我必须比较两个列,一个使用'SQL_Latin1_General_CP1_CI_AS',另一个使用'Latin1_General_CP1_CI_AS'。

我只是使用这个选项加入这两个。

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

© www.soinside.com 2019 - 2024. All rights reserved.