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

时间:2009-10-27 16:12:42

标签: sql tsql sql-server-2008 collation string-comparison

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

  

(...)   3.可以指定COLLATE子句   在几个层面。这些包括   以下内容:

     

投射整理的   表达。您可以使用COLLATE   应用字符表达式的子句   一定的整理。字符   文字和变量已分配   当前的默认排序规则   数据库。列引用是   分配定义整理   专栏。对于整理   表达式,见Collation Precedence   (处理SQL)。

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

4 个答案:

答案 0 :(得分:32)

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

答案 1 :(得分:16)

CASTCONVERT是多余的!

SELECT N'abc' COLLATE French_CS_AS

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

答案 2 :(得分: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

答案 3 :(得分:1)

如果您想比较或合并不同归类的两列,则可能会有所帮助。 就我而言,我不得不将两列进行比较,一列使用“ SQL_Latin1_General_CP1_CI_AS”,另一列使用“ Latin1_General_CP1_CI_AS”。

我只是在我将这两者结合在一起时使用了此选项。

  

在A.Person = B.NAME上整理database_default